Mysql 如何返回表A中包含数百个ID列的表B中存在ID列的所有列

Mysql 如何返回表A中包含数百个ID列的表B中存在ID列的所有列,mysql,sql,Mysql,Sql,我了解如何检查表A中的列ID是否存在于表B中的列X中 但是,有没有一种方法可以返回表a中与表B中的单个标识符不匹配的所有行 实际上,表B包含数百列 表A: +------------+------+--------+----------------+ | Title Name | ID | Region | Numeric Column | +------------+------+--------+----------------+ | Sam | B021 | NA

我了解如何检查表A中的列ID是否存在于表B中的列X中

但是,有没有一种方法可以返回表a中与表B中的单个标识符不匹配的所有行

实际上,表B包含数百列

表A:

+------------+------+--------+----------------+
| Title Name |  ID  | Region | Numeric Column |
+------------+------+--------+----------------+
| Sam        | B021 | NA     |           5.99 |
| Brook      | B026 | EU     |           5.99 |
| Harry      | B032 | KOR    |          10.99 |
+------------+------+--------+----------------+
表B:

+------+-------+-------+
| SAM  | BROOK | HARRY |
+------+-------+-------+
| B021 | B024  | B030  |
| 1    | B025  | B031  |
| 2    | 4     |       |
| 3    |       |       |
+------+-------+-------+

因此,在本例中,我希望我的查询选择表A中的第2行和第3行。

我将使用
NOT in
函数

SELECT * FROM TABLE A 
WHERE col_A NOT IN (SELECT col_A
                    FROM TABLE B)
这将返回
表A
列A
的val不在
表B
列A


希望这是有帮助的

我认为,无论如何,您都需要枚举要搜索的列

我会选择
左连接
反模式,它允许您(安全地)使用
in
操作符:

select ta.*
from tableA ta
left join tableB tb on ta.id in (tb.sam, tb.brook, tb.harry) 
where coalesce(tb.sam, tb.brook, tb.harry) is null
如果在
表B
中有一列
不为空
(例如,列
从不为空
),则可以简化
where
子句:

select ta.*
from tableA ta
left join tableB tb on ta.id in (tb.sam, tb.brook, tb.harry) 
where tb.never_null is null

使用不存在的文件可能会起作用

SELECT *
FROM TableA a
WHERE NOT EXISTS 
(
    SELECT 1
    FROM TableB b
    WHERE a.ID IN (b.SAM, b.BROOK, b.HARRY)
);

我想你在找我

工会不起作用

所以

小提琴

SELECT
选择行,而不是列。当然,可以指定所需的列(或表达式),但返回的是行。
SELECT * 
FROM tablea 
Where `ID` NOT IN (SELECT HARRY FROM tableb)
OR `ID` NOT IN ( SELECT SAM FROM tableb ) 
OR `ID` NOT IN (SELECT HARRY FROM tableb)