Avatar billede supermand69 Nybegynder
01. august 2004 - 22:00 Der er 11 kommentarer og
1 løsning

NULL i join

Jeg har her en query:

SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name
        FROM $DB.$table debate, $DB.user user
        LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
        WHERE debate.user_id=user.id && debate.reply_id=$reply_id
        GROUP BY debate.id
        ORDER BY debate.time DESC

hvis user.name ikke eksisterer vil den ikke vise rækken?!
Avatar billede arne_v Ekspert
01. august 2004 - 22:13 #1
SELECT debate.id, debate.subject, debate.time, COUNT(debate2.reply_id) AS replies, user.name
        FROM ($DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id)
        LEFT JOIN $DB.$table debate2 ON debate.id=debate2.reply_id
        WHERE debate.reply_id=$reply_id
        GROUP BY debate.id
        ORDER BY debate.time DESC

måske (jeg er ikke sikker på at jeg har forstået problemet rigtigt)
Avatar billede supermand69 Nybegynder
01. august 2004 - 22:18 #2
det virker ikke stadig?!

altså hvis user.name er NULL skal rækken stadig vises
Avatar billede arne_v Ekspert
01. august 2004 - 22:33 #3
rækken burde under alle omstændigheder vises selvom user.name er NULL

men LEFT JOIN burde gøre at rækken kommer med selvom user.id er NULL
(altså hvis der ikke er en matchende række i user tabellen)
Avatar billede supermand69 Nybegynder
01. august 2004 - 22:40 #4
jeg forstår det bare ikke, for den viser ikke rækken hvis der ikke eksistere en matchende række i user??? lidt underligt
Avatar billede supermand69 Nybegynder
01. august 2004 - 22:42 #5
altså hvis jeg ikke bruger left join...
Avatar billede supermand69 Nybegynder
01. august 2004 - 22:55 #6
lav et svar forresten ;)
Avatar billede arne_v Ekspert
01. august 2004 - 22:57 #7
Virker det ?
Avatar billede supermand69 Nybegynder
01. august 2004 - 23:02 #8
ja, med dit forslag så virker det :D
Avatar billede arne_v Ekspert
01. august 2004 - 23:04 #9
så ligger jeg et svar
Avatar billede arne_v Ekspert
01. august 2004 - 23:06 #10
FROM $DB.$table debate, $DB.user user ... WHERE debate.user_id=user.id

og

$DB.$table debate JOIN $DB.user user ON debate.user_id=user.id

kræver at der er række ri begge tabeller mens

$DB.$table debate LEFT JOIN $DB.user user ON debate.user_id=user.id

kun kræver at der er en række i tabellen til venste
Avatar billede supermand69 Nybegynder
01. august 2004 - 23:12 #11
giver de 2 øverste query'er det samme? det er måske bare 2 forskellige måder at skrive det på??
Avatar billede arne_v Ekspert
01. august 2004 - 23:17 #12
ja
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