如何从两个表中查找字段中的重复值以及它本身?

时间:2017-03-27 09:59:26

标签: php sql

我看过一篇几乎相同的帖子,但它没有回答我的问题。 我有2个表,table1和table2。两者都有col1字段

 SELECT
        *
    FROM
        table1
    GROUP BY
        col1
    HAVING 
        COUNT(col1) > 1

此代码将为我们提供数据,其中col1值在table1中重复,但我需要在col1中获取值,其中值在table1或table2中重复,因此table1中有2个数据具有相同的col1值,或者table2中的col1值相同 或者从2个表复制,因此table1中有数据,其中col1 = A,而table2中的数据也是col1 = A.

4 个答案:

答案 0 :(得分:0)

如果我理解你想要第2组表数据?例如,如果表1中的col1 ='a'和表2中的col1 ='a',您想显示数据? 如果是的话,试试这个

select sel.col1 from (SELECT
        col1
    FROM
        table1
    GROUP BY
        col1
    union all
    SELECT
        col1
    FROM
        table2) sel
    GROUP BY
        sel.col1
    HAVING 
        COUNT(sel.col1) > 1

答案 1 :(得分:0)

您可以使用以下内容:

  1. UNION ALL - 如果他们具有相同的信息架构
  2. 加入表格然后使用HAVING子句

答案 2 :(得分:0)

如果我理解正确,你不关心你是在table1中找到两次值,还是在table2中找到两次,或者在table1中找到一次,在table2中找到一次;你考虑所有这些重复。所以你想看看所有table1记录和所有table2记录构建的整个集合。您可以使用UNION ALL

获取这些内容
SELECT col1
FROM (SELECT col1 FROM table1 UNION ALL SELECT col1 FROM table2) t
GROUP BY col1
HAVING COUNT(*) > 1

答案 3 :(得分:0)

获取table1table2的值的并集,然后对该结果进行分组和过滤。使用UNION ALL,以便在执行联合时不会丢失重复项。

SELECT * FROM (
    SELECT col1 FROM table1
    UNION ALL
    SELECT col1 from table2    -- you can change the column name as required
) AS blah
GROUP BY 1 HAVING count(*) > 1;

请注意GROUP BY中按字段编号引用的列。这允许您在不同的表中使用不同的列名,而不必使用AS来对列名称进行别名。