私は2つの単純なテーブルカウントレコード他の一つではありません:MYSQL
ユーザー
+----+--------+-----------+
| id | gender | birthdate |
+----+--------+-----------+
userpreference
+----+------------------+-----------------+
| id | preference value | preference type |
+----+------------------+-----------------+
を持って質問:
私は、 '買い物'のような特定の嗜好値をリストしていないすべての人に問い合わせたいと思っています。これは、嗜好タイプを列挙していないので、外来キーとして、2番目のテーブル(ユーザーの好み)に表示されないすべての人を自分の人数に含めたいと思っていますか?自分の好み値として優先値「ショッピング」を持っていない人の
合計#:
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'
これは面白いアプローチです。内括弧は、最初に「買い物」を好みの値に設定して、その結果から数えます。チェックとして「id」? – Warz
@Warz - これは内部クエリが外部クエリで何かを参照する相関サブクエリです。 Exists式は、サブクエリ内の1つのローが各ユーザに対して返される場合にtrueを返すように動作します。 Existsサブクエリが行を返す唯一の方法は、特定のユーザーに少なくとも1つの設定があり、その設定行の1つが「買い物」である場合です。 Not Existsを使用することで、指定したユーザーの優先行がないか、「ショッピング」の行がないと言います。 – Thomas