如果满足条件,则省略JOIN

时间:2015-07-26 21:24:19

标签: mysql join

如果转换此查询以处理s.userId等于-1时的情况,在这种情况下应该省略JOIN?

SELECT s.*, u.type AS userType, u.email AS userEmail
FROM session s
JOIN users u ON ( u.user_id = s.userId )
WHERE ( s.storeId = ? )
ORDER BY s.timeUpdated DESC

1 个答案:

答案 0 :(得分:3)

使用LEFT JOIN

SELECT s.*, u.user_type AS userType, u.email AS userEmail
FROM session s
LEFT JOIN users u ON u.user_id = s.userId
WHERE ( s.storeId = ? )
ORDER BY s.timeUpdated DESC

注意,如果有一个id为-1的用户,会有一些奇怪的行为,但我认为永远不会发生。但通常情况下,我们会存储null而不是像-1这样的虚假值,以表明存在“无”#39}。 (在这种情况下'没有用户')。

对于连接它并不重要,但是通过使字段可为空并存储空值,您还可以为users表创建外键约束,以便验证其他非空ID。实际上存在于表中。这是一种确保数据有效的方法。如果没有这些限制,即使这些用户不存在,您也可以插入-5或300000,这可能会在以后导致令人不快的意外。