从出现的表中计算记录是一个而不是其他:MYSQL

我有两个简单的表格 用户
+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+
userpreference
+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+
题: 我想查询所有未列出特定首选项值的人,例如“shopping”。这包括所有未列出任何首选项类型的人,以便该列可以为null,但是因为userpreference的列'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'
    
已邀请:
Select Count(*)
From Users
Where Not Exists   (
                    Select 1
                    From UserPreference As UP1
                    Where UP1.id = Users.id
                        And UP1.PreferenceValue = 'Shopping'
                    )
    
尝试一个正确的加入,包括所有不在第二个表中显示的人 选择 * 从
Users
RIGHT JOIN Userpreference ON(users.
userID
=Users.
userID
) WHERE preference_value ='shopping'     
试试这个: SELECT COUNT(DISTINT U.id)FROM users U NATURAL LEFT JOIN userpreference UP   在哪里UP.preferencevalue IS NULL或UP.preferenceValue!='shopping'; LEFT JOIN应该引入所有用户记录,无论他们是否有UP记录。     

要回复问题请先登录注册