Avatar billede lako Nybegynder
25. juni 2003 - 17:18 Der er 15 kommentarer

SQL forespøgsel

Hej
Min database er mySQL 4.0.12

Jeg skal flette produktdata med tidligere kundekøb. Jeg har to tabeller:

tblProducts (prodID, prodCategoryID, description, price ) tblCustBuys (custID, prodID)

Jeg skal returneret poster for alle varer samt for hver vare et felt som enten er NULL eller indeholder kundenr. hvis den pågældende kunde har købt varen tidligere.

Data skal udtrækkes med kriterier for kundenr (custID) og varegruppe (prodCategoryID).

Jeg har forsøgt med nedenstående SQL forespørgsel, men den returnerer et tomt datasæt.

SELECT tblProducts.prodID, tblProducts.description, tblCustBuys.custID
FROM tblProducts LEFT JOIN tblCustBuys ON tblvarevariant.prodID = tblCustBuys.prodID
WHERE (tblkundekoeb.custID = 'xxxxxxxx' Or (tblCustBuys.custID Is Null and tblCustBuys.prodID is NULL))
and tblProducts.prodCategoryID = 612

Forhåbentligt er der et klogt hoved der har svaret.

mvh
Lars Kohsel
Avatar billede jinxit Nybegynder
25. juni 2003 - 17:26 #1
SELECT tblProducts.prodID, tblProducts.description, tblCustBuys.custID
FROM tblProducts LEFT JOIN tblCustBuys ON tblProducts.prodID = tblCustBuys.prodID
WHERE (tblCustBuys.custID = 'xxxxxxxx' OR tblCustBuys.custID IS NULL)
and tblProducts.prodCategoryID = 612
Avatar billede jinxit Nybegynder
25. juni 2003 - 17:28 #2
1) Du anvender 2 tabeller "tblvarevariant" og "tblkundekoeb" som enten ikke er erklæret i FROM clause eller er anvendt i et forkert sammenhæng (JOIN fy)

2) Det giver ikke nogen mening at bruge tblCustBuys.prodID IS NULL i dit WHERE clause... DE EKSISTERER IKKE EFTER EN JOIN PÅ DENNE VÆRDI!
Avatar billede jinxit Nybegynder
25. juni 2003 - 17:31 #3
Derudover er jeg ikke helt sikker på at den vil æde dit where clause efter du selv har join'et tabellerne... skriv lige hvis den stadigvæk brokker sig, så omskriver jeg lige hurtigt.
Avatar billede lako Nybegynder
25. juni 2003 - 17:32 #4
Undskyld tblVarevariant er tblproducts og tblkundekoeb er tblCustBuys. Jeg har omdøbt dem for at det skulle give mening for engelsksprogede
Avatar billede lako Nybegynder
25. juni 2003 - 17:55 #5
SELECT tblProducts.prodID, tblProducts.description, tblCustBuys.custID
FROM tblProducts LEFT JOIN tblCustBuys ON tblProducts.prodID = tblCustBuys.prodID
WHERE (tblCustBuys.custID = 'xxxxxxxx' OR tblCustBuys.custID IS NULL)
and tblProducts.prodCategoryID = 612

Ovenstående uden "Where" returnere alle kombinationer af varer og kundenr der kan laves på varetabel og kundekøbstabel. Jeg skal kun bruge en post for hver vare samt et felt der angiver om kunde xxxxxxx tidligere har købt varen
Avatar billede jinxit Nybegynder
25. juni 2003 - 17:57 #6
SELECT temp.prodID, temp.description, temp.custID
FROM (tblProducts LEFT JOIN tblCustBuys ON tblProducts.prodID = tblCustBuys.prodID) AS temp
WHERE (temp.custID = 'xxxxxxxx' OR temp.custID IS NULL)
and temp.prodCategoryID = 612

Det burde fixe det :o)
Avatar billede jinxit Nybegynder
25. juni 2003 - 18:00 #7
Men det giver dig ikke de varer som en anden har købt, men ikke kunde 'xxxxxxx'
Avatar billede jinxit Nybegynder
25. juni 2003 - 18:03 #8
SELECT t1.prodID, t1.description, t2.custID
FROM tblProducts t1, tblCustBuys t2
WHERE

WHERE (temp.custID = 'xxxxxxxx' OR temp.custID IS NULL)
and temp.prodCategoryID = 612
Avatar billede jinxit Nybegynder
25. juni 2003 - 18:04 #9
Sorry... en tanke torsk :o)
Avatar billede lako Nybegynder
25. juni 2003 - 18:20 #10
Hvor bliver temp defineret ?
Avatar billede jinxit Nybegynder
25. juni 2003 - 18:22 #11
i FROM via. AS temp
Avatar billede lako Nybegynder
25. juni 2003 - 18:33 #12
jeg får en syntax fejl når jeg skriver :

SELECT t1.prodID, t1.description, t2.custID
FROM tblProducts t1, tblCustBuys t2
AS temp
WHERE (temp.custID = 'xxxxxxxx' OR temp.custID IS NULL)
and temp.prodCategoryID = 612


hvis jeg skriver :

SELECT t1.prodID, t1.description, t2.custID
FROM tblProducts t1, tblCustBuys t2
WHERE (t2.custID = 'xxxxxxxx' OR t2.custID IS NULL)
and t1.prodCategoryID = 612

får jeg ikke et tomt datasæt men heller ikke alle linier i tblProducts og custID er lig 'xxxxxxx' for alle poster i det returnerede datasæt !
Avatar billede jinxit Nybegynder
25. juni 2003 - 18:38 #13
Posten 18:03:36 var en tanke torsk...
Avatar billede lako Nybegynder
25. juni 2003 - 18:42 #14
er vi så tilbage til 17.57 ?

Jeg får en syntaks fejl når jeg kører den. Fejl i nærheden af AS
Avatar billede lako Nybegynder
26. juni 2003 - 09:25 #15
Hej

Jeg har fået det ønskede resultat ved at skrive til forespørgsler i Access og derefter kombinere dem i en tredje, men den går jo ikke i mySQL ! Derfor har jeg brug for hjælp til en omskrivning af de tre forespørgsler til een.

(Tabeller og feltnavne er rettet til dansk)

QRY3 (resultatet):
SELECT qry1.varenr, qry1.Overskrift, qry2.kundenr
FROM qry1 LEFT JOIN qry2 ON qry1.varenr = qry2.varenr;

QRY2:
SELECT tblkundekoeb.varenr, tblkundekoeb.kundenr
FROM tblkundekoeb
WHERE (((tblkundekoeb.kundenr)="xxxxxxxx" Or (tblkundekoeb.kundenr) Is
Null));

QRY1:
SELECT DISTINCT tblvarevariant.Varenr, tblvarevariant.Overskrift
FROM tblvarevariant LEFT JOIN tblkundekoeb ON tblvarevariant.Varenr =
tblkundekoeb.varenr;
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