MySQL(InnoDB)从2个表中选择并始终获得空结果集

时间:2010-08-09 03:50:44

标签: mysql innodb

我有点困惑。我使用MySQL 5+和InnoDB作为我的引擎。如果我运行以下语句并且表'user_temp'为空,我总是得到一个空的结果集,无论'users'表中有什么。

SELECT * FROM `users`, `user_temp` 

如果我在'user_temp'中输入内容,我会收回所有结果。这假设是这样的吗?

感谢。

2 个答案:

答案 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是对各种连接类型的良好直观解释。