Kezdőoldal » Számítástechnika » Programozás » Miért jönnek le rossz adatok...

Miért jönnek le rossz adatok ezzel az sql lekérdezéssel?

Figyelt kérdés

Van két táblám (Mysql, MariaDB), az egyikben azonosítókat tárolok termékekről. Egy terméknek három féle azonosítója lehet, kétfajta gyártói azonosítója és egy EAN száma. Egy termék adatai egy sorban szerepelnek a következőképpen:

TermékazonosítóID Ean Termékazonosító1 Termékazonosító2

Van egy másik táblám a termékek tábla, ahol a TermékazonosítóID egy idegen kulcs. Egy termék többször is szerepelhet, de maximum háromszor, három különböző szállítótól, három beszerzési és eladási áron. Nem minden szállító szállít minden terméket.

Csoportosítanom kellene a TermékazonosítóID szerint a termékeket és leszednek azokat, ahol az eladási ár a legalacsonyabb.

Az eladási ár tényleg a legalacsonyabb lesz, de amikor három szállítótól is jön egy termék, az összes többi adat nem feltétlenül a jó adat. Tehát lehetséges, hogy másik szállító, másik termékID stb... Az ár mindig a minimális.

Miért?

A lekérdezés a következő:

SELECT productidentifiers.*, MIN(products.SellingPrice) as MinPrice,

products.ProductName, products.Supplier stb...

FROM products

INNER JOIN productidentifiers

ON products.ProductIdentifierID = productidentifiers.RelationID

GROUP BY productidentifiers.RelationID;


Szóval tényleg a minimális árat hozza le a lekérdezés, de van, hogy az összes többi adat nem jó, tehát nem az a szállító, nem az a termékID stb...


Számomra ez érthetetlen az egész, tekintettel arra, hogy ennek egészen biztosan nem így kellene működnie normális esetben.

Valami tipp?



#SQL #minimális mező sql
2020. máj. 2. 17:08
 1/4 anonim ***** válasza:
63%
Véletlenül se mondjuk sql fiddle példa legyen a kérdésben, cserébe a leírás legyen tele misztikus fieldekkel, így kell ezt!
2020. máj. 2. 17:23
Hasznos számodra ez a válasz?
 2/4 anonim ***** válasza:
18%

Ez azért van, mert semmi megszorítás nincs arra, hogy a minimális árú termék adatait kérje le. Igen, lekéred az árak minimumát, de ez nem vonja maga után, hogy a többi adat is a minimális értékű terméktől fog jönni.


Ezt úgy kell megközelíteni, hogy egy subquery-ben először lekéred hogy melyik terméknek mennyi a minimum ára, és inner join-al hozzárendeled saját magához úgy, hogy az id és a minimum érték is meg kell egyezzen. Így a product tábládat leszűkíted azokra a sorokra, amelyik a minimális értékeket tartalmazza. Valahogy így:


SELECT ...

FROM products

INNER JOIN

(

    SELECT ProductIdentifierID, MIN(SellingPrice) as min_price

    FROM products

    GROUP BY ProductIdentifierID

) as min_product ON min_product.ProductIdentifierID = product.ProductIdentifierID AND min_product.SellingPrice = product.SellingPrice

INNERJOIN productidentifiers ... a többi kb ugyanaz marad.

2020. máj. 2. 18:16
Hasznos számodra ez a válasz?
 3/4 anonim ***** válasza:
32%
Elírások meg hibák vannak benne, de a lényeg szerintem át jön így is.
2020. máj. 2. 18:17
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:

Köszönöm szépen a választ, már korábban megtaláltam mi a hiba, de ha nem találtam volna meg, akkor segített volna.

Minden jót!

2020. máj. 2. 18:36

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!