匹配来自不同表的行 - MySQL
Posted
技术标签:
【中文标题】匹配来自不同表的行 - MySQL【英文标题】:Matching rows from different tables - MySQL 【发布时间】:2020-07-08 20:17:14 【问题描述】:我有以下表格:
表格
sanit, sanit2列
sub,id_pes,已批准我想找到出现在这两个表中的行。因此,每列的行必须具有相同的值。 我尝试了以下代码。但它不起作用。
select sube, id_pes, approved from sanit
where sube in (select sube from sanit2) and
id_pes in (select id_pes from sanit2) and
approved in (select approved from sanit2);
一旦我知道出现在两个表中的所有行,我将使用这些行创建一个新表。
【问题讨论】:
我不太确定它是否能解决我的问题。 这是不正确的查询 - 即使所有 3 个条件都为 TRUE,但这并不意味着取相同的值 从同一行。 【参考方案1】:我想你想要一个子查询。在 mysql 中你可以使用in
:
select sube, id_pes, approved
from sanit
where (sube, id_pes, approved) in (select sube, id_pes, approved from sanit2);
请注意,NULL
值将导致比较失败。
【讨论】:
我猜你应该使用exists or cte
我不确定语法是否有效
感谢您的回答。我觉得和我做的差不多,不是吗?但是你做的方式要聪明得多。
@CarlosVilaca 。 . .不,这与问题中的查询完全不同。这要求sanit
的一行中的所有三个值都出现在sanit2
的一行中。你的版本不需要那个。匹配可以是任何行。【参考方案2】:
SELECT sube, id_pes, approved
FROM sanit
WHERE EXISTS ( SELECT NULL
FROM sanit2
WHERE sanit.sube <=> sanit2.sube
AND sanit.id_pes <=> sanit2.id_pes
AND sanit.approved <=> sanit2.approved );
即使某些列为 NULL,此查询也会返回所有匹配的行。
【讨论】:
以上是关于匹配来自不同表的行 - MySQL的主要内容,如果未能解决你的问题,请参考以下文章
关于mysql中的left join和left outer join的区别