Kezdőoldal » Számítástechnika » Programozás » SQL-ben lekérdezni azokat a...

SQL-ben lekérdezni azokat a sorokat egy táblából, amik azonosítója nem szerepel egy másikban?

Figyelt kérdés

Adott 2 táblám:

TERMEKEK

--------

azonosito: auto incr. int

nev: tinytext

ar: int


FORGALOMBAN

-----------

azonosito: auto incr. int

termek_azonosito: int (ez a kapcsolat a másik táblával)

...


az ok, hogy hogy kérdezem le az összes terméket:

SELECT * FROM TERMEKEK;


az is ok, hogy hogyan kérdezem le azt a terméket, ami a FORGALOMBAN táblában is szerepel:

SELECT * FROM TERMEKEK, FORGALOMBAN WHERE TERMEKEK.azonosito = FORGALOMBAN.termek_azonosito;


Na de hogyan kérdezem le azokat, amik NEM szerepelnek a FORGALOMBAN adattáblában?

Arra gondoltam, hogy lekérdezem a forgalomba hozottakat, és PHP-ben kiszűrögetem, de szeretném simán SQL-ben megoldani, hogy használhassak LIMIT-et a lekérdezésben.



2014. márc. 16. 14:28
 1/7 anonim ***** válasza:
SELECT * FROM TERMEKEK WHERE TERMEKEK.azonosito NOT IN (SELECT ID FROM FROGALOMBAN );
2014. márc. 16. 14:36
Hasznos számodra ez a válasz?
 2/7 anonim ***** válasza:

bocsánat,kis elgépelés,meg én ID-t szoktam használni..

SELECT * FROM TERMEKEK WHERE TERMEKEK.azonosito NOT IN (SELECT azonosito FROM FORGALOMBAN );

2014. márc. 16. 14:37
Hasznos számodra ez a válasz?
 3/7 anonim ***** válasza:
65%

A not in... megoldás logikailag egyszerű, de borzasztóan lassú tud lenni. Ennél általában sokkal gyorsabb a halmazelméleti különbség alkalmazása:


SELECT * FROM termekek WHERE azonosito IN

(SELECT azonosito FROM termekek

EXCEPT

SELECT termek_azonosito FROM forgalomban)


Ha csak az azonosítók kellenek, elég a zárójeles rész.

Egy tanács: csak az SQL alapszavakat írd nagybetűkkel, így szokás, sokkal olvashatóbb lesz tőle a kód.

2014. márc. 16. 15:33
Hasznos számodra ez a válasz?
 4/7 anonim ***** válasza:

"az is ok, hogy hogyan kérdezem le azt a terméket, ami a FORGALOMBAN táblában is szerepel:

SELECT * FROM TERMEKEK, FORGALOMBAN WHERE TERMEKEK.azonosito = FORGALOMBAN.termek_azonosito;"


A kérdésedre a választ már megirták, én csak annyit tennék hozzá, hogy már ez sem jó, amit ide irtál.


Továbbá, nem értem, miért kell egy külön táblában tárolni azt, hogy forgalomban van-e, ez sebesség szempontjából a lehető legrosszabb megoldás, miért nem a termekek táblába raksz egy forgalomban nevü bool mezőt, ami true, ha forgalomban van az adott termék, és false, ha ha nincs forgalomban?


Tényleg csak segitségképpen irom, de nézz utána a normálformáknak, mielőtt DB-t tervezel, nem nehéz megérteni, nem is hosszú, viszont nem lehet nélküle normális DB-t tervezni..

[link]


Kezdetnek egyelőre elég, ha a 3. normálformáig elsajátitod a dolgokat.

2014. márc. 17. 13:47
Hasznos számodra ez a válasz?
 5/7 anonim ***** válasza:
Valamint várom annak a szakmai indoklását, aki a hármas választ lepontozta... De ha csak jólesett, akkor egészségetekre.
2014. márc. 17. 14:16
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
#1-es vagyok. Én se értem,miért tette ..
2014. márc. 17. 15:36
Hasznos számodra ez a válasz?
 7/7 A kérdező kommentje:

Köszönöm szépen a válaszokat, sikerült!

Én osztottam a plusszokat rendesen! :)

Köszi még egyszer!

2014. márc. 18. 11:19

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!