Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan kell kiválasztani egy...

Hogyan kell kiválasztani egy táblából azokat a sorokat, amik nincsenek benne egy másik táblában?

Figyelt kérdés
Például tabla_1-ből szeretném kiválasztani azokat a sorokat, amik nincsenek benne a tabla_2 táblában.

2017. ápr. 28. 23:12
1 2
 1/11 anonim ***** válasza:
0%
For ciklussal szépen megvizsgálod minden egyes rekordra az egyezoseget
2017. ápr. 28. 23:21
Hasznos számodra ez a válasz?
 2/11 anonim ***** válasza:
100%

"For ciklussal szépen megvizsgálod minden egyes rekordra az egyezoseget"

Rossz válasz.

Egyrészt ehhez két for ciklus kell, ami a táblák méretéből adódóan nagyon lassú lehet, másrészt ez tipikusan adatbázisra bízható feladat, mert az ilyen dolgokra agyon van optimalizálva és sokkal gyorsabban elvégzi.


SELECT name

FROM table2

WHERE name NOT IN

(SELECT name

FROM table1)


vagy


SELECT t1.name

FROM table1 t1

LEFT JOIN table2 t2 ON t2.name = t1.name

WHERE t2.name IS NULL

2017. ápr. 28. 23:42
Hasznos számodra ez a válasz?
 3/11 anonim ***** válasza:
Nem egyszerűbb ORM-et használni? Vagy natívan akarod megoldani?
2017. ápr. 29. 10:06
Hasznos számodra ez a válasz?
 4/11 anonim ***** válasza:
#3: hogy írod le ORM -el!? :-)
2017. ápr. 29. 10:11
Hasznos számodra ez a válasz?
 5/11 anonim ***** válasza:

Nem tudom, hogy php-hoz van-e olyan orm, ami deferred evaluation-t alkalmaz (biztos van), de C#-ban így csinálnám Entity Framework-kel:


var result = db.Table1.Where(entity => !db.Table2.Contains(entity)).ToList();


Ezt nem futtatja le egy az egyben az adatokon memóriában, hanem generál belőle egy sql query-t, amit majd a .ToList() híváskor küld le a db-hez.

2017. ápr. 29. 11:26
Hasznos számodra ez a válasz?
 6/11 anonim ***** válasza:

#2

A két megoldásodban szerintem pont fel van cserélve a két tábla.

De nem ezért írok, hanem mert az első egy nagyon lassú, kerülendő megoldás. Nagy tábláknál iszonyú sok idő lehet.


Ahol lehet, érdemes a

select name from table1

except

select name from table2


alakot használni, ami nagyságrenddel gyorsabb is lehet az előzőnél.

2017. ápr. 30. 09:27
Hasznos számodra ez a válasz?
 7/11 anonim ***** válasza:

#5

Nem ismerem ezt a módszert, amit írsz. Lehet, hogy ránézésre egyszerűbb. De ha csak annyit tudsz, hogy "generál egy lekérdezést", akkor azért érdemes megnézni, milyet, már ha nem bébi táblákkal dolgozol, és számít a sebesség. Én használtam más olyan programokat, amik lekérdezéseket generálnak, sőt fejlesztettem is, és azért ezek a lekérdezések nem mindig lesznek a leghatékonyabbak. Örül a programozó, ha egyáltalán működnek minden esetben.

2017. ápr. 30. 09:30
Hasznos számodra ez a válasz?
 8/11 anonim ***** válasza:
Hát azért az .Net-es Entitiy Framework a "Örül a programozó, ha egyáltalán működnek minden esetben"-nál kicsit jobban meg van írva.
2017. ápr. 30. 10:44
Hasznos számodra ez a válasz?
 9/11 anonim ***** válasza:
#8: Kicsit Google -z rá. :-D
2017. ápr. 30. 12:04
Hasznos számodra ez a válasz?
 10/11 anonim ***** válasza:
Te guglizz rá, ha nem tudsz valamit.
2017. ápr. 30. 13:11
Hasznos számodra ez a válasz?
1 2

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!