我有两个简单的表
用户
+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+
userpreference
+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+
问题:
我想查询所有未列出特定偏好值的人,例如'shopping'。这包括所有未列出任何偏好类型的人,以便列可以为null,但是因为用户偏好的列'id'引用用户作为外键,我还想在我的计数中包括所有未出现在第二个表中的人(用户偏好)?
没有偏好值'shopping'作为偏好值的总人数:
以下是我的尝试:
SELECT
(
SELECT COUNT(DISTINCT userpreference.id) FROM userpreference
WHERE preferencevalue != 'shopping')
+
(
SELECT COUNT(users.id)
FROM users
WHERE users.id NOT IN
(SELECT userpreference.Id
FROM userpreference )
)
AS'Total'
答案 0 :(得分:2)
Select Count(*)
From Users
Where Not Exists (
Select 1
From UserPreference As UP1
Where UP1.id = Users.id
And UP1.PreferenceValue = 'Shopping'
)
答案 1 :(得分:0)
尝试正确的加入,包括所有不会出现在第二个表格中的人
SELECT *
来自Users
RIGHT JOIN Userpreference ON(用户。userID
=用户。userID
)
WHERE preference_value ='shopping'
答案 2 :(得分:0)
试试这个:
SELECT COUNT(DISTINT U.id)FROM users U NATURAL LEFT JOIN userpreference UP WHERE UP.preferencevalue IS NULL或UP.preferenceValue!='shopping';
LEFT JOIN应该引入所有用户记录,无论他们是否有UP记录。