执行时
select *, count(*) c
FROM mytable
GROUP BY col3, col4
HAVING c > 1
order by col4, col3;
我期望获得任何值的行,在选择中,至少有两个等价物(col3,col4)。 但是我得到的结果只有一行出现一些col3值。有人可以解释一下原因吗?
换句话说,我正在尝试构建查询,以获取wichch所有行(col3,col4)不止一次出现。
意外结果的示例是:
id - col1 - col2 - col3 - col4 - c
123- val1 val123 43 val444 2
456- val14 val52 45 val444 2
列col3中的43从未出现在结果中,但我希望如此。否则该行不应该在结果中。
正确,
select * from ukberu1m where col3=43 and col4=val444;
在原始表中给出两个结果,但在结果表中只有一行是由一厢情愿的标准显示的,而不是两个由于某种原因。
答案 0 :(得分:2)
如果要查看具有重复项的所有行,而不是每个行的一个实例,则需要将查询与原始表联接。
SELECT t1.*
FROM mytable AS t1
JOIN (SELECT col3, col4
FROM mytable
GROUP BY col3, col4
HAVING COUNT(*) > 1) AS t2
ON t1.col3 = t2.col3 AND t1.col4 = t2.col4
ORDER BY col4, col3
答案 1 :(得分:1)
假设每行id
是唯一的,另一种方法是:
select t.*
from mytable t
where exists (select 1
from mytable t2
where t2.col3 = t.col3 and t2.col4 = t.col4 and t2.id <> t.id
);
这种方法的优点是它可以很好地利用mytable(col3, col4)
上的索引。