2012-11-24 10 views
5

Mam tabelę - komentarze. Użytkownicy mogą publikować, jeśli nie są członkami witryny, ale chcą pokazać swoje dane, jeśli są.SQL Dołącz i pokaż wyniki, jeśli dołącz fałszywe

Jeśli więc użytkownik komentuje, kto NIE jest członkiem, pokazuję jego posty, ale nie łączę się z ich profilem, ponieważ go nie mają.

Dlatego w poniższym zapytaniu chcę wrócić wiersze, nawet jeśli nie ma dołączyć:

select wc.comment, wc.comment_by_name, wc.user_id, u.url from comments wc 
join users u on wc.wag_uid = u.user_id 
where id = '1237' group by wc.comment order by wc.dateadded desc 

chcę wrócić:

comment comment_by_name user_id url 
------- --------------- ------- ---- 
hello  dan    12   /dan 
hey  jane       /jane 
world  jack    10   /jack 

Ale powyższe nie zwraca dane dla Jane, ponieważ nie ma identyfikatora użytkownika

Czy istnieje sposób na zwrócenie wszystkich danych, nawet jeśli łączenie ma wartość zerową?

Odpowiedz

8

użycie LEFT JOIN zamiast

SELECT wc.comment, wc.comment_by_name, wc.user_id, u.url 
FROM comments wc 
     LEFT JOIN users u 
      on wc.wag_uid = u.user_id 
WHERE id = '1237' 
GROUP BY wc.comment 
ORDER BY wc.dateadded DESC 

zasadzie INNER JOIN wybrać tylko rekordy, które rekord z jednej tabeli ma conajmniej jeden mecz na drugim stole podczas LEFT JOIN zaznaczyć wszystkie wiersze z boku tabeli Lewa strona (w swojej sprawa, to comments), czy nie pasuje do drugiej tabeli.

+0

Sam się uczę dołączania w locie i to jest cenna lekcja właśnie tutaj! Dzięki wielkie! Przyjmę, kiedy pozwoli mi –

+2

zobaczyć tutaj [Wizualne przedstawienie połączeń SQL] (http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins) –