我有点困惑。我使用MySQL 5+和InnoDB作为我的引擎。如果我运行以下语句并且表'user_temp'为空,我总是得到一个空的结果集,无论'users'表中有什么。
SELECT * FROM `users`, `user_temp`
如果我在'user_temp'中输入内容,我会收回所有结果。这假设是这样的吗?
感谢。
答案 0 :(得分:2)
那是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
答案 1 :(得分:2)
使用LEFT OUTER JOIN
无条件地从users
获取结果,例如:
SELECT
u.*, ut.*
FROM
`users` u
LEFT OUTER JOIN `user_temp` ut
ON ut.user_id = u.user_id
Here是对各种连接类型的良好直观解释。