SQL JOIN INNER或OUTER

时间:2011-09-30 09:38:54

标签: sql inner-join

我有两张桌子: 用户:id username clan 部落: id clan crest

我尝试按用户名进行搜索,输出用户名的部落。

查询:

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 

4 个答案:

答案 0 :(得分:2)

如果你想要第一张表的结果,即使第二张表中没有匹配,你也想要使用LEFT OUTER JOIN。

答案 1 :(得分: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 :(得分:0)

尝试

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

答案 3 :(得分:0)

您需要使用某些条件加入表格。您正在使用ON,您应该使用WHERE。我假设usersclanclans有关。clans?试试这个:

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