Avatar billede mortency Nybegynder
02. marts 2005 - 13:06 Der er 12 kommentarer og
1 løsning

SQL spørring

Jeg har 3 tabeller.

ProdProdusentKategorier(tabell)
ProdKatID (int)
ProdKatNavn (varchar)

ProdRelProdusenter_ProdKategorier(tabell)
RelId (int)
Rel_FK_ProdID (int)
Rel_FK_FKProdKatID

ProdProdusenter(tabell)
ProdID (int)
osv....

Det jeg skal ha ut er alle kategorier som en produsent ikke har registrert.

Følgende sql benyttes når alle kategorier en produsent er registrert med.

SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE Rel_FK_FKProdKatID=ProdKatID AND Rel_FK_ProdID=5

Hvordan kan jeg hente ut alle de resterende kategorier som en produsent ikke har registrert?

//Morten
Avatar billede the_party_dog Nybegynder
02. marts 2005 - 13:12 #1
SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE ProdKatID NOT IN (SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE Rel_FK_FKProdKatID=ProdKatID AND Rel_FK_ProdID=5)
Avatar billede the_party_dog Nybegynder
02. marts 2005 - 13:13 #2
SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE ProdKatID NOT IN (SELECT ProdKatID FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE Rel_FK_FKProdKatID=ProdKatID AND Rel_FK_ProdID=5)
Avatar billede the_party_dog Nybegynder
02. marts 2005 - 13:13 #3
Den sidste virker måske... Hvis jeg nu forstod dit sprog, ville jeg måske kunne hjælpe bedre :)
Avatar billede kjulius Novice
02. marts 2005 - 19:35 #4
I stedet for NOT IN vil jeg foreslå, at du bruger NOT EXISTS i stedet for, da den normalt vil være en del mere effektiv:

SELECT ProdKatID, ProdKatNavn FROM ProdRelProdusenter_prodKategorier RK WHERE NOT EXISTS (SELECT * FROM ProdProdusentKategorier PK WHERE PK.ProdKatID = RK.Rel_FK_FKProdKatID) AND RK.Rel_FK_ProdID=5

(eller noget i den retning...) :-)

Af hensyn til gennemskueligheden har jeg givet de to tabeller et kort alias:
RK=ProdRelProdusenter_prodKategorier
PK=ProdProdusentKategorier


Jeg håber det er forståeligt...
Avatar billede kjulius Novice
02. marts 2005 - 19:47 #5
Alternativt kunne du også bare bruge en outer join i stedet for en inner join og så vælge de rows, hvor Rel_FK_FKProdKatID er null (altså, at der ikke kunne findes nogen tilhørende rows i ProdRelProdusenter_prodKategorier):

SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier RIGHT OUTER JOIN  ProdProdusentKategorier ON Rel_FK_FKProdKatID=ProdKatID WHERE Rel_FK_ProdID=5 AND Rel_FK_FKProdKatID=ProdKatID IS NULL

Bemærk, hvis du bytter om på tabellerne, skal du bruge en LEFT OUTER JOIN (eller bare LEFT JOIN).
Avatar billede kjulius Novice
02. marts 2005 - 19:49 #6
Argh, hvad sker det?! Det skulle naturligvis være:

SELECT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier RIGHT OUTER JOIN  ProdProdusentKategorier ON Rel_FK_FKProdKatID=ProdKatID WHERE Rel_FK_ProdID=5 AND Rel_FK_FKProdKatID IS NULL
Avatar billede mortency Nybegynder
03. marts 2005 - 09:09 #7
//the_party_dog din spørring virker fint.

SELECT DISTINCT ProdKatID,ProdKatNavn FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE ProdKatID NOT IN (SELECT ProdKatID FROM ProdRelProdusenter_prodKategorier, ProdProdusentKategorier WHERE Rel_FK_FKProdKatID=ProdKatID AND Rel_FK_ProdID=5)

//kjulius
Ingen av dine spørringer virker.

Takk for hjelpen begge to! the_party_dog poster du et svar.
Avatar billede the_party_dog Nybegynder
03. marts 2005 - 09:21 #8
ok...

Glad for at jeg kunne hjælpe... Hvor kommer du fra?
Avatar billede kjulius Novice
03. marts 2005 - 10:25 #9
Heya Norge!

Jeg er ked af, at mine forespørgsler (spørringer) ikke virker. Gav de fejl, eller returnerede de noget forkert?
Avatar billede mortency Nybegynder
03. marts 2005 - 15:15 #10
Hei!

Hvordan kan jeg ta med en WHERE Prodprodukter.P_FKProdID=5

i denne spørringen?

SELECT DISTINCT PID,PNavnNO,PKatNavn,PSisteTest,PSertifikatnr,POpprettet,PAktiv, COUNT(DISTINCT DelTestID) AS AntallDelTester, COUNT(DISTINCT TestBildeID) AS AntallTestBilder FROM ProdProdukter LEFT JOIN ProdProduktKategorier ON (ProdProduktKategorier.PKatID=ProdProdukter.PKategori) LEFT JOIN ProdProduktDelTester ON (ProdProduktDelTester.DelTest_FKPID=ProdProdukter.PID) LEFT JOIN ProdProduktTestBilder ON (ProdProduktTestBilder.TestBilde_FKPID=ProdProdukter.PID) GROUP BY PID,PNavnNO,PKatNavn,PSisteTest,PSertifikatnr,POpprettet,PAktiv ORDER BY PNavnNO ASC
Avatar billede mortency Nybegynder
03. marts 2005 - 15:17 #11
//the_party_dog

Jeg kommer fra Norge som kjulius skrev.

//kjulius
Spørringene din returnerte ikke noe. Ingen data.
Avatar billede mortency Nybegynder
03. marts 2005 - 15:21 #12
Glem spm.....

WHERE P_FKProdID=5 GROUP BY PID,PNavnNO,PKatNavn,PSisteTest,PSertifikatnr,POpprettet,PAktiv ORDER BY PNavnNO ASC
Avatar billede kjulius Novice
03. marts 2005 - 20:19 #13
Okay, så har jeg vel læst spørgsmålet forkert... That's life... :-)
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