2016-04-12 49 views
0

我正在尝试编写一条SQL命令,该列返回给我的每条记录,其中name,agecity列在同一个表中具有相同的值。选择具有多个相等列值的行

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 

回答

0

“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,所以我不记得是否需要这样做,但我会加上它来确保。

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