【问题标题】:Finding mySQL rows that have two matching fields [duplicate]查找具有两个匹配字段的 mySQL 行 [重复]
【发布时间】:2018-11-29 22:31:31
【问题描述】:

我正在尝试编写一个查询,该查询将返回具有两个匹配字段的行。

|-------------|-------------|----------|
|      id     |   field 1   |  field 2 |
|-------------|-------------|----------|
|      1.     |      a      |     z    | #
|-------------|-------------|----------|
|      2.     |      b      |     x    |
|-------------|-------------|----------|
|      3.     |      c      |     y    | ##
|-------------|-------------|----------|
|      4.     |      a      |     z    | #
|-------------|-------------|----------|
|      5.     |      b      |     z    |
|-------------|-------------|----------|
|      6.     |      c      |     y    | ##
|-------------|-------------|----------|

上面标记的行将从这样的查询中返回。它们本质上是重复的。 我尝试在字段 1 = 字段 1 和字段 2 = 字段 2 的地方自行连接表格,但无济于事。 这可以在不编写包含多个查询的 PHP 脚本的情况下完成吗?

【问题讨论】:

标签: mysql


【解决方案1】:
SELECT t.*
FROM mytable t
INNER JOIN (
   SELECT field_1, field_2
   FROM mytable
   GROUP BY field_1, field_2
   HAVING COUNT(id)>1
) f
ON t.field_1 = f.field_1
   AND t.field_2 = f.field_2

【讨论】:

    【解决方案2】:

    对不起,我误会了。你正在寻找这样的东西:

    SELECT GROUP_CONCAT(t1.id), t1.f1, t1.f2 
    FROM t t1 
    CROSS JOIN t t2 
    WHERE t1.f1=t2.f1 AND t2.f2=t1.f2 AND t1.id != t2.id
    GROUP BY t1.f1, t1.f2
    

    【讨论】:

    • 这不考虑字段 1。他们可能在字段 1 中有 B,在字段 2 中有 Y。
    • 我继续更新它。我假设您想要 feidl1 和 feild2 作为结果,而不是 id?
    • 现在添加组以防您需要 ids
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多