SQL ПРИСОЕДИНЯЙТЕСЬ ВНУТРЕННИМ или НАРУЖНЫМ - PullRequest
0 голосов
/ 30 сентября 2011

У меня есть две таблицы: пользователи : идентификатор пользователя имя клана кланы: идентификатор гребня клана

Я пытаюсь выполнить поиск по имени пользователя с выводом клана имени пользователя.

Запрос:

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 ]

2 голосов
/ 30 сентября 2011

Вы переходите из одной таблицы в другую, используя 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%'

Имейте в виду, в вашей таблице пользователей, в идеале вы должны иметь идентификатор клана, а не название клана. Затем вы будете использовать этот запрос для выполнения поиска:

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 голосов
/ 30 сентября 2011

Если вам нужны результаты из первой таблицы, даже если во второй таблице НЕТ совпадений, вы хотите использовать LEFT OUTER JOIN.

0 голосов
/ 30 сентября 2011

Вам нужно присоединиться к таблице, используя какое-то условие. Вы используете ON, где вы должны использовать ГДЕ. Я предполагаю, что users. clan относится к clans. 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%'
0 голосов
/ 30 сентября 2011

Попробуйте

SELECT `users`.`id`, `users`.`username`,`users`.`clan`, `clans`.`crest` FROM `users` LEFT JOIN `clans` ON `users`.`username` LIKE '%gu%' 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...