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

时间:2011-03-04 01:43:59

标签: mysql select inner-join

我有两个简单的表

用户

+----+--------+-----------+
| 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'

3 个答案:

答案 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记录。