首页 > 解决方案 > MYSQL检查一个表中存在的每个项目是否存在于另一个表中

问题描述

如何检查一个表中的所有项目是否存在于另一个表中。例如,考虑以下两个表。

使用他们各自的查询:

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);

标签: mysql

解决方案


如果您可以按客户检查,您可以这样做:

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;

这里查询基本上是从表 A 中获取不在表 B 中的订单。如果没有,则在最后执行选择。否则,它什么也不做。

如果您customer_id = 3改用,您将得到一行 orderID 为 5(“表 C”)的行。


推荐阅读