SQL LEFT JOIN WHERE

时间:2016-08-07 19:48:18

标签: mysql sql

我有两个表,一个是setID,每个userID的设置值,另一个是userID,他们的电子邮件和用户名。

我正在尝试加入特定设置的值,问题是并非所有用户都将此特定设置与其ID相关联,因此我的行数最多比实际需要的少。

Table 1
userID settingID settingValue

Table 2
userID userDOB userEmail userName 

我的查询如下:

SELECT u.userID, u.userEmail, s.settingValue
FROM users u
LEFT JOIN userSettings s ON u.userID = s.userID
WHERE s.settingID = 1

我需要做什么才能让所有用户都在列表中?

2 个答案:

答案 0 :(得分:3)

您的where子句将left join变为inner join。将条件放入JOIN

SELECT u.userID, u.userEmail, s.settingValue
FROM users u
LEFT JOIN userSettings s ON u.userID = s.userID
                        AND s.settingID = 1

答案 1 :(得分:0)

您可以使用UNION ALL子句合并两个JOINS

SELECT  u.userID, u.userEmail, s.settingValue
     FROM users u
     LEFT userSettings s
     ON u.userID = s.userID
UNION ALL
     SELECT  u.userID, u.userEmail, s.settingValue
     FROM users u
     RIGHT userSettings s
     ON u.userID = s.userID