我有一个JOIN的SQL,如果我运行它,它会忽略users表中group_id中具有NULL值的记录。因此,我得到的结果较少
SELECT u.user_id, u.email, g.group_name
FROM users u
JOIN groups g USING (group_id)
WHERE u.year=2017
但是,如果我在没有JOIN的情况下运行它:
SELECT u.user_id, u.email
FROM users u
WHERE u.year=2017
然后它给了我需要的所有用户。某些用户没有设置group_id,因为这不是必填字段。有没有办法加入NULL值呢?我是否需要在groups表中使用NULL值?这是不可能的,因为groups表中的group_id字段是NOT NULL和PRIMARY KEY
答案 0 :(得分:5)
您必须使用LEFT JOIN
:
SELECT u.user_id, u.email, g.group_name
FROM users u
LEFT JOIN groups g USING (group_id)
WHERE u.year=2017
答案 1 :(得分:1)
如果您想让所有用户获得group_id
,请使用左连接SELECT u.user_id, u.email, g.group_name
FROM users u
LEFT JOIN groups g USING (group_id)
WHERE u.year=2017
或使用您的版本调整条款
SELECT u.user_id, u.email, g.group_name
FROM users u
JOIN groups g ON(u.group_id = g.group_id OR u.group_id IS NULL)
WHERE u.year=2017