从表中获取重复计数和数据

时间:2012-11-05 08:33:22

标签: php sql

我有3张这样的表:

TABLE_1

+-ID-+-table_3_id-+
|  1 |          1 |
|  2 |          1 |
|  3 |          2 |
+----+------------+

TABLE_2

+-ID-+-table_1_id-+-name--+-value-+
|  1 |          1 | Name1 | Data1 |
|  2 |          1 | Name2 | Data2 |
|  3 |          1 | Name3 | Data3 |
|  4 |          2 | Name1 | Data1 |
|  5 |          2 | Name2 | Data4 |
|  6 |          2 | Name3 | Data5 |
|  7 |          3 | Name1 | Data6 |
|  8 |          3 | Name2 | Data2 |
+----+------------+-------+-------+

表3由ID和其他与此问题无关的数据组成。但是,我需要能够过滤table_3_id

这就是我需要的: 表2有多行,其中包含table_1中行的信息。我需要有一个查询来检查'data'列中是否有重复项,它们具有相同的'name'。我需要的结果是(使用WHERE table_3_id = 1):

+-table_3_id-+-name--+-value-+-duplicate-+
|          1 | Name1 | Data1 | true      |
|          1 | Name2 | Data2 | false     |
|          1 | Name3 | Data3 | false     |
+------------+-------+-------+-----------+

或者,如果可能,只返回table_2中实际上是重复的数据。 'duplicate'字段也可以是一个计数,因为我知道具有相同table_3_id的行数。

我希望我的问题足够明确。如果不够清楚,我会尝试改进它。我已尝试使用连接和子查询,但我对SQL的了解还不足以进行这样的高级查询。我更喜欢在单个查询中使用它而不是PHP中的多个。

2 个答案:

答案 0 :(得分:2)

您可以使用下面的内容:

select Name
from table
group by name
having count(*) > 1

答案 1 :(得分:1)

如果存在重复项,则需要检查Table_2中的每一行。这可以使用子查询来完成,如下所示:

SELECT 
    B.Table_3_ID
    ,A.Name 
    ,A.Value
    ,(SELECT COUNT(*) FROM Table_2 C
        WHERE C.Name = A.Name AND C.Value = A.Value)
    AS DuplicateCount
FROM Table_2 A
INNER JOIN Table_1 B
    ON A.Table_1.ID = B.ID

我的SQL中可能存在一些错误,尤其是表别名,因为我目前没有语法检查,但原则应该有效。