Kezdőoldal » Számítástechnika » Programozás » Segítene valaki összedobni...

Segítene valaki összedobni egy ilyen SQL-kódot?

Figyelt kérdés

Sulis feladathoz kellene, de sehogysem tudom összerakni, akárhogyan próbálkozok, források alapján sem jó.


A feladat a következő:

Van két tábla, mondjuk A és B. Mindegyik táblában szerepel egy R nevű oszlop.

Egy olyan SQL-kód létrehozása a feladat, ami kilistázza azokat a rekordokat, amik a B tábla R-oszlopában megtalálhatóak, de az A tábla R-oszlopában nem.


Valaki tudna ebben segíteni?



2020. dec. 15. 19:58
 1/7 anonim ***** válasza:
87%
Ez egy left join lekérdezés, ennyit segítek.
2020. dec. 15. 20:09
Hasznos számodra ez a válasz?
 2/7 A kérdező kommentje:
Próbáltam így is, de hiába, mindet kilistázza.
2020. dec. 15. 21:08
 3/7 anonim ***** válasza:
Esetleg ha leírod, milyen kóddal pórbálkoztál, megmutathatnánk mi a gond.
2020. dec. 15. 21:58
Hasznos számodra ez a válasz?
 4/7 A kérdező kommentje:
SELECT a.r FROM a LEFT JOIN b ON a.r = b.r
2020. dec. 15. 22:09
 5/7 anonim ***** válasza:
100%

Már régen sql-eztem, de a kedvedért utánanéztem a join-oknak.

De ha kiindulunk halmazokból, az is jó, aztána nyelv majd ad hozzá szitnaxist.

Ugye van nekünk 2 halmazunk, A és B. Ezeknek van olyan része, ami közös (ez a metszet középen), van 1-1 olyan rész ami csak az egyiknek van meg, és van egy része ami egyiknek sincs meg. Az utóbbival (azaz ami sehol nincs meg) nem érdemes foglalkoznunk.

Van egy olyan rész, ami mindkettőben megvan, ez a metszet (matematikailag A ∩ B ), ennek az sql megfelelője az INNER JOIN.

Létezik halmazelméletileg az A, vagyis relációs adatbázisban úgy elképzelve, hogy minden A elem benne van, és amelyikhez az illesztés mentén létezik B elem, ott összeilleszti, amúgy null. Ezt hívják LEFT JOIN-nak. (És ezért nem működött, mert ez ezt csinálja).

Ennek van a párja, ami ugyanezt csinálja, vagyis minden B elemet visszaad, és ahol van hozzá A, ott mellékeli, ez a RIGHT JOIN.

És most szükségünk van nekünk olyanra, ami azt jelöli, amelyik csak az A-ban van, de a középső metszetben (vagyis így B-ben) nincs.

Ez matematikailag A\B.

Ilyen nyelvi elem sajnálatosan nincsen SQL-ben, így matematikailag kell összeraknunk, és azt leimplementálni.

Nézzük, hogyan kaphatjuk meg A\B halmazt. Tulajdonképpen nagyon egyszerű, annyi az egész, hogy lekérdezzük az összes A elemet, és utána kitöröljük belőle azokat, amik benne vannak A ∩ B -ben. Melyik elemek vannak B-ben?

Azok, amelyeknek az értéke adott. Vagyis ahol nincs értéke a B.r mezőnek a LEFT JOIN esetén, az azért van, mert a join miatt az sql engine pótolta ki null-al. Hát keressük azokat, ahol nullára jött ki ez az érték.

Valahogy így nézhet ki, de lehet hogy nem tökéletes a szintaxisa, épp nem találok sql tesztkörnyezetet:

SELECT * FROM A LEFT JOIN B ON A.r=B.r WHERE B.r IS NULL

2020. dec. 15. 23:04
Hasznos számodra ez a válasz?
 6/7 anonim ***** válasza:
nem
2020. dec. 16. 22:41
Hasznos számodra ez a válasz?
 7/7 anonim ***** válasza:

#5

Majdnem jó csak a feladat szövege szerint fordítva :)

[link]


Másképp fogalmazva: listázzki minden B-t ami nincs benne A-ban. Tehát az ábrán a jobb középső a megoldása a feladatnak.

2020. dec. 17. 21:41
Hasznos számodra ez a válasz?

További 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!