APorter1031:
1つのテーブル内のすべての項目は、別の内に存在するかどうかはどのように確認することができます。たとえば、次の2つの表を考えてみましょう。
それぞれのクエリの場合:
SELECT orderID
FROM orders
WHERE customer_id = 1;
TABLE A
-------
orderID
2
1
6
4
SELECT orderID
FROM orders
WHERE customer_id = 2;
TABLE B
-------
orderID
5
1
7
9
表Aからすべての項目は、表B内に存在していないので、私は何も出力したくありません
しかし、私が持っていました。
SELECT orderID
FROM orders
WHERE customer_id = 3;
TABLE C
-------
orderID
5
表C内のすべての項目は、表Bにあるので、私は出力にそれを望みます
私は表Cで選択を行うとしたら、私は、テーブルCを出力することが期待されます。
私は、次のクエリを試してみました:
SELECT *
FROM (SELECT orderID
FROM orders
WHERE customer_id = 1) A
WHERE A.orderID IN (
SELECT orderID
FROM orders
WHERE customer_id = 2);
アンドリュー:
あなたはバイ・顧客ごとにチェックすることができれば、あなたはこれを行うことができます。
IF (NOT EXISTS
SELECT NULL
FROM orders
WHERE customer_id = 1 -- "Table A"
AND orderID NOT IN
-- "Table B"
(SELECT orderID
FROM orders
WHERE customer_id = 2)
)
SELECT orderID
FROM orders
WHERE customer_id = 1;
ここでクエリが基本的に存在しない場合はテーブルBに存在しないテーブルAからの注文を取得し、それが次に終了時に選択を行います。それ以外の場合は、何もしません。
あなたが使用している場合はcustomer_id = 3
代わりに、あなたはのorderID 5(「表C」)で1行を取得します。