[英]Selecting rows with multiple equal column values
我正在尝试编写一条SQL命令,该命令返回每条记录,其中name
, age
和city
列在同一张表中具有相同的值。
id name age city
1 John 22 London
2 John 22 London
3 Nancy 24 Tokyo
我已经找到了这个问题 ,看来这正是我想要的,但是不幸的是,当我运行以下命令时,PhpMyAdmin开始加载并且没有完成,所以我收到"Gateway Timeout error"
所以我认为做错了事。 我不是sql向导,所以如果有人可以修复我的代码,我将不胜感激。
我不太了解完整的代码,但是我认为ta
和ta2
是代表我的表名的变量,但是我对这个主题并不熟悉,因此任何帮助都是有用的。
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.