【问题标题】:Matching rows from different tables - MySQL匹配来自不同表的行 - 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,但这并不意味着取相同的值 从同一行

标签: mysql sql mysql-workbench


【解决方案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,此查询也会返回所有匹配的行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-15
    • 2022-10-13
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2015-05-07
    • 1970-01-01
    相关资源
    最近更新 更多