Avatar billede badal Nybegynder
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);
Avatar billede badal Nybegynder
04. januar 2010 - 13:34 #2
Id_X i de andre tabler er en fremmed nøgle der bruges til at mappe tabellerne.

Men jeg fik fat i ideen og er kommet videre. Kan du komme med et svar så giver jeg point.
04. januar 2010 - 13:54 #3
Jamen det var godt.  Her er et svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester