Mysql 如何返回表A中包含数百个ID列的表B中存在ID列的所有列
我了解如何检查表A中的列ID是否存在于表B中的列X中 但是,有没有一种方法可以返回表a中与表B中的单个标识符不匹配的所有行 实际上,表B包含数百列 表A: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
+------------+------+--------+----------------+
| 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)