我有兩個簡單的表計數的記錄是一個而不是其他:MYSQL
用戶
+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+
userpreference
+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+
問題:
我想查詢所有未列出特定首選項值的人員,例如'shopping'。這包括所有未列出任何首選項類型的人員,以便該列可以爲空,但由於userpreference的列'id'引用了用戶作爲一個外鍵,我還希望在我的數量中包括所有沒有出現在第二個表中的用戶(用戶偏好)?
總不具備優先值「購物」作爲自己的喜好價值誰的人#:
這裏是我曾嘗試:
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'
這是一個有趣的方法,從內括號開始,您首先將所有具有「購物」列出的人列爲自己的偏好值,然後從該結果中統計出用戶表中所有未顯示的人'身份證'作爲支票? – Warz 2011-03-04 02:39:23
@Warz - 這是一個相關的子查詢,其中內部查詢引用外部查詢中的某些內容。如果每個用戶返回一個子查詢中的一行,則Exists表達式將返回true。 Exists子查詢返回一行的唯一方法是給定用戶至少有一個首選項,其中一個首選項行是「購物」。通過使用不存在,我說要麼沒有給定用戶的首選項行,要麼沒有「購物」行。 – Thomas 2011-03-04 03:58:04