MySQL (InnoDB) Выберите из 2 таблиц и всегда получите пустой набор результатов - PullRequest
1 голос
/ 09 августа 2010

Я немного растерялся. Я использую MySQL 5+ с InnoDB в качестве движка. Если я запускаю следующую инструкцию и таблица user_temp пуста, я всегда получаю пустой набор результатов, независимо от того, что находится в таблице users

SELECT * FROM `users`, `user_temp` 

Если я добавлю что-то в 'user_temp', я верну все результаты. Предполагается, что это работает так?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 09 августа 2010

Используйте LEFT OUTER JOIN, чтобы безоговорочно получить результаты от users, например:

SELECT 
    u.*, ut.*
FROM 
    `users` u
    LEFT OUTER JOIN `user_temp` ut
    ON ut.user_id = u.user_id

Здесь - хорошее визуальное объяснение различных объединенийтипы.

2 голосов
/ 09 августа 2010

Это INNER JOIN. Но вы указываете поле соединения. Я думаю, что вы хотите OUTER JOIN. Может быть, даже FULL OUTER JOIN

Ваш пример может быть переписан как:

SELECT * FROM users, user_temp
INNER JOIN user_temp
ON users.id_user = user_temp.id_temp

Если ни одна строка не совпадает с id_user, что определенно имело бы место, если одна из таблиц была бы пустой, тогда вы получили бы 0 записей в вашем наборе результатов.

Попробуйте:

SELECT * FROM users, user_temp
LEFT JOIN user_temp
ON users.id_user = user_temp.id_temp
...