04. januar 2010 - 10:15
Der er
2 kommentarer og
1 løsning
SQL Select stament
Hejsa
Jeg har følgende tabler:
XXX
------
Id_X
Name
A
-----
Id_A
Name
Id_X
B
-----
Id_B
Name
Id_X
C
----
Id_C
Name
Id_X
Id_X
Jeg skal lave en udtræk over de rækker i XXX tabelen som ikke findes i en af disse tabeller A, B, C.
Kan jeg lave sådan udtræk med SQL eller skal jeg lave det i koden?
Bruger PHP / MySQL
04. januar 2010 - 10:43
#1
Ja, du soeger efter name i X NOT IN (name in A) o.s.v.
For test lavede jeg fire tabeller og fyldte et par navne i som nedenstaaende. Denne kode:
SELECT name
FROM BadalX
WHERE name NOT IN
(SELECT name FROM BadalA)
AND name NOT IN
(SELECT name FROM BadalB)
AND name NOT IN
(SELECT name FROM BadalC)
giver dette resultat:
name
name1
name7
hvilket det skulle efter nedenstaaende data.
Men jeg forstaar ikke helt hvad felterne Id_X goer i tabellerne A til C. De skal da vel ikke vaere fremmednoegler til tabel X. Fremmednoeglers funktion skulle jo vaere at sikre referentiel integritet saaledes at du ikke i tabellerne A til C kan indsaette navne der ikke forekommer i tabel X, men du synes netop at oenske (eller forvente) forskellige navne.
Ikke desto mindre her er mine oevelses tabeller og data:
CREATE TABLE BadalX(id INTEGER, name VARCHAR(10));
CREATE TABLE BadalA(id INTEGER, name VARCHAR(10), id_X INTEGER);
CREATE TABLE BadalB(id INTEGER, name VARCHAR(10), id_X INTEGER);
CREATE TABLE BadalC(id INTEGER, name VARCHAR(10), id_X INTEGER);
INSERT INTO BadalX VALUES(1, 'name1');
INSERT INTO BadalX VALUES(2, 'name2');
INSERT INTO BadalX VALUES(3, 'name3');
INSERT INTO BadalX VALUES(4, 'name4');
INSERT INTO BadalX VALUES(5, 'name5');
INSERT INTO BadalX VALUES(6, 'name6');
INSERT INTO BadalX VALUES(7, 'name7');
INSERT INTO BadalX VALUES(8, 'name8');
INSERT INTO BadalX VALUES(9, 'name9');
INSERT INTO BadalX VALUES(10, 'name10');
INSERT INTO BadalA VALUES(1, 'name2', 5);
INSERT INTO BadalA VALUES(2, 'name4', 5);
INSERT INTO BadalA VALUES(3, 'name5', 5);
INSERT INTO BadalA VALUES(4, 'name8', 5);
INSERT INTO BadalA VALUES(5, 'name10', 5);
INSERT INTO BadalB VALUES(1, 'name3', 5);
INSERT INTO BadalB VALUES(2, 'name6', 5);
INSERT INTO BadalB VALUES(3, 'name9', 5);
INSERT INTO BadalB VALUES(4, 'name12', 5);
INSERT INTO BadalB VALUES(5, 'name15', 5);
INSERT INTO BadalC VALUES(1, 'name4', 5);
INSERT INTO BadalC VALUES(2, 'name8', 5);
INSERT INTO BadalC VALUES(3, 'name12', 5);
INSERT INTO BadalC VALUES(4, 'name16', 5);
INSERT INTO BadalC VALUES(5, 'name20', 5);