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

时间:2016-04-12 17:17:38

标签: mysql sql

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

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

我已经找到了this question,而且它似乎正是我想要的,但不幸的是,当我运行以下命令时,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

2 个答案:

答案 0 :(得分:0)

" TA"只是一个别名。它是变量。它只是让您用速记来引用表格,以便您的查询更清晰。

如果您只想要重复值,那么您可以使用聚合函数和var meetupDocument = connection.model('meetup', meetupSchema);子句更轻松地完成此操作:

HAVING

我不确定为什么你的原始查询超时(除了你的表太大而不能及时返回该查询),但我注意到你没有语句终止符(用于PostgreSQL的分号)。几年后我还没有和PostgreSQL合作,所以我不记得是否要求,但我会加以确认。

答案 1 :(得分:0)

试一试。这将允许您带回所有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
相关问题