1

重複の可能性:
MySQL - テーブル B に存在しないテーブル A の値のリストを取得する方法は?

私は 3 つのテーブルを持っています。

表 x:

+------+
| ID   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+

テーブル Y

+------+
| ID   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
+------+

表 Z

+------+
| ID   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
|    5 |
|    6 |
|    7 |
+------+

値が存在することを見つける必要がありますTABLE Zが、テーブルには存在しませんX and Y

出力:

+----+
| ID |
------
| 6  |
| 7  |
+----+

どうすればこれを入手できますか?

4

4 に答える 4

1
SELECT z.ID 
FROM TableZ z
LEFT JOIN TableX x on x.ID = z.ID
LEFT JOIN TableY y on y.Id = z.ID
WHERE x.Id IS NULL 
AND y.ID IS NULL

sqlFiddle(Xavi Lopezと私のもので、どちらも同じ結果になります)

于 2013-01-28T13:44:00.783 に答える
1

EXISTSサブクエリを作成するために使用できます。

SELECT tz.id 
FROM Z tz 
WHERE 
    NOT EXISTS (select 1 from X tx where tx.id = tz.id)
    AND NOT EXISTS (select 1 from Y ty where ty.id = tz.id)

@RaphaëlAlthausの答えは、おそらく効率の点で優れています。JOINまたはEXISTSを使用してパフォーマンスを向上させることはできますか?を参照してください。

MySQLリファレンスには13.2.9.6EXISTSに関するセクションがあります。EXISTSまたはNOTEXISTSを含むサブクエリ

于 2013-01-28T13:44:05.540 に答える
0
SELECT  a.ID
FROM    tableZ a
        LEFT JOIN
        (
            SELECT ID FROM tableX
            UNION 
            SELECT ID FROM tableY
        ) b ON a.ID = b.ID
WHERE   b.ID IS NULL
于 2013-01-28T13:45:01.343 に答える
0

マイナス機能が使える

SELECT * FROM Z
MINUS
(
SELECT * FROM Y
UNION
SELECT * FROM X
)
于 2013-01-28T13:50:10.880 に答える