繁体   English   中英

选择具有多个相等列值的行

[英]Selecting rows with multiple equal column values

我正在尝试编写一条SQL命令,该命令返回每条记录,其中nameagecity列在同一张表中具有相同的值。

id  name  age  city
1   John  22   London
2   John  22   London
3   Nancy 24   Tokyo

我已经找到了这个问题 ,看来这正是我想要的,但是不幸的是,当我运行以下命令时,PhpMyAdmin开始加载并且没有完成,所以我收到"Gateway Timeout error"所以我认为做错了事。 我不是sql向导,所以如果有人可以修复我的代码,我将不胜感激。

我不太了解完整的代码,但是我认为tata2是代表我的表名的变量,但是我对这个主题并不熟悉,因此任何帮助都是有用的。

SELECT ta.name
      ,ta.age
      ,ta.city

FROM mytablename ta
WHERE (SELECT COUNT(*)
       FROM mytable ta2
       WHERE ta.name = ta2.name
       AND ta.age =ta2.age
       AND ta.city =ta2.city)>1

“ TA”只是一个别名。 不是变量。 它只是让您以简写形式引用表,从而使查询更清晰。

如果只需要重复的值,则可以使用聚合函数和HAVING子句更轻松地做到这一点:

SELECT
    TA.name,
    TA.age,
    TA.city
FROM
    MyTableName TA
GROUP BY
    TA.name,
    TA.age,
    TA.city
HAVING
    COUNT(*) > 1;

我不确定您的原始查询为什么会超时(不是您的表太大而无法及时返回该查询),但是我注意到您没有语句终止符(PostgreSQL的分号)。 几年来我一直没有使用PostgreSQL,所以我不记得是否需要这样做,但是我会添加它以确保。

试试看。 这样一来,您不仅可以带回所有ID,还可以带回所有具有多个值的三列。

SELECT x.* from mytablename x
INNER JOIN (
          SELECT concat(y.name,'|',y.age,'|',y.city) as 'Fields'
          FROM mytablename y
          GROUP BY concat(y.name,'|',y.age,'|',y.city)
          HAVING count(*) > 1
          ) y on concat(x.name,'|',x.age,'|',x.city) = y.Fields

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM