1

我有3个这样的表:

表格1

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

表_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 中行的信息。我需要有一个查询来检查“数据”列中是否存在具有相同“名称”的重复项。我需要的结果是这样的(使用 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 中的数据。“重复”字段也可以是一个计数,因为我确实知道具有相同 table_3_id 的行数。

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

4

2 回答 2

2

您可以使用以下内容:

select Name
from table
group by name
having count(*) > 1
于 2012-11-05T08:34:57.603 回答
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可能有一些错误,尤其是表别名,因为我目前没有语法检查,但原理应该可以。

于 2012-11-05T08:52:00.543 回答