Почему мой запрос не возвращает никаких результатов? - PullRequest
3 голосов
/ 31 августа 2011

Почему этот SQL-запрос показывает результаты только в том случае, если в users_warnings есть только строка?

SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 INNER JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21

Я хочу показать всем пользователям, а также взять столбец «предупреждение» в users_warnings, если есть.

Ответы [ 4 ]

6 голосов
/ 31 августа 2011

INNER JOIN возвращает что-то, только если в обеих таблицах есть данные.
Вместо этого попробуйте LEFT JOIN:

SELECT u.id, uw.warning FROM users u
            LEFT JOIN users_warnings uw ON (u.id = uw.uID)
            LIMIT 21
6 голосов
/ 31 августа 2011

Поскольку вы используете inner join, для которого требуется наличие строки в объединенной таблице. Попробуйте следующее:

SELECT 
 u.id, 
 uw.warning 
FROM 
 users u
 LEFT JOIN users_warnings uw ON (
  u.id = uw.uID
 )
LIMIT 21
2 голосов
/ 31 августа 2011

Измените свое внутреннее соединение на левое соединение, как показано ниже:

SELECT u.id, uw.warning FROM users u
                LEFT JOIN users_warnings uw ON (u.id = uw.uID)
                LIMIT 21
1 голос
/ 31 августа 2011
SELECT  
    u.id,  
    IFNULL(uw.warning,'') warning
FROM  
   (SELECT id FROM users LIMIT 21) u 
   LEFT JOIN users_warnings uw
   ON u.id = uw.uID 
;
  • Должно быть ЛЕВОЕ СОЕДИНЕНИЕ, а не ВНУТРЕННЕЕ СОЕДИНЕНИЕ
  • Рефакторинг запроса для получения первых 21 пользователя перед попыткой присоединения (более быстрый запрос)
  • Предупреждение по умолчанию в пустую строкуесли у пользователя нет предупреждения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...