2011-09-30 101 views
0

我有兩個表: 用戶:ID的用戶名族 氏族: ID族波峯SQL JOIN內部或外部

我試圖通過用戶名與輸出做搜索用戶名的戰隊。

查詢:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` JOIN `clans` ON `users`.`username` LIKE '%gu%' 

輸出:

id username clan  crest  
2 gusar     26_760.gif 
3 gusar11  Tong  26_760.gif 

如果戰隊是空的波峯將是空的。但是......(

我想下面的結果:

id username clan  crest  
2 gusar     
3 gusar11  Tong  26_760.gif 

回答

2

你正在使用LIKE從一個表加入到另一個表,通常沒有什麼理由要這樣做。相反,您可能希望在WHERE子句中使用外鍵來連接表。

您想使用LEFT OUTER JOIN(或LEFT JOIN的簡稱)來嘗試匹配第二個表中的所有行,但如果沒有匹配,顯示NULL值:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` 
FROM `users` 
LEFT JOIN `clans` ON `users`.`clan` = `clans`.`clan` 
WHERE `users`.`username` LIKE '%gu%' 

請注意,在你的用戶表中,理想情況下你應該持有氏族ID而不是氏族頭銜。然後,您將使用此查詢執行搜索:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` 
FROM `users` 
LEFT JOIN `clans` ON `users`.`clanid` = `clans`.`id` 
WHERE `users`.`username` LIKE '%gu%' 
2

如果你想要結果f從第一個表格開始,即使第二個表格中沒有匹配項,您也要使用LEFT OUTER JOIN。

0

嘗試

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` LEFT JOIN `clans` ON `users`.`username` LIKE '%gu%' 
0

你需要使用一些條件加入到表中。你正在使用ON,你應該使用WHERE。我假設usersclan涉及clansclans?試試這個:

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` LEFT JOIN `clans` ON `users`.`clan` = `clans`.`clan` WHERE `users`.`username` LIKE '%gu%'