匹配来自不同表的行 - 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 复杂字符串匹配

MySQL触发器将日期插入具有唯一匹配ID的行

关于mysql中的left join和left outer join的区别

奇怪的 MySQL JOIN,我想包含匹配项并且没有来自连接的匹配项

如果条件在两个表的行中匹配,则创建返回 id 的查询