我有MYSQL数据库
id | value1 | value2
---+--------+-------
1 | 1 | 1
2 | 10 | 3
3 | 10 | 3
4 | 10 | 2
5 | 11 | 3
6 | 11 | 2
7 | 12 | 1
8 | 13 | 4
如何返回同一value1出现多次但具体值的所有列的列表,例如,我想返回value1 = 10:
value1 | value2
10 | 3
10 | 3
10 | 2
我使用了这样的计数查询:
SELECT value1,value2 FROM table WHERE value1 in (
SELECT value1 FROM table GROUP BY value1=10 having count(*) > 1 )
但是这样的回报
value1 | value2
1 | 1
10 | 3
10 | 3
10 | 2
为什么返回值为1 = 1?
任何想法? THX。
答案 0 :(得分:1)
由于
,它返回值为1 = 1的行GROUP BY value1=10
这是通过布尔表达式的结果来指定分组,该表达式为每一行返回1(TRUE),0(FALSE)或NULL。
要获取value1具有相同值的行数,您需要
GROUP BY value1
如果您只想返回value1等于10的行,则可以在WHERE子句中包含谓词
WHERE value1 = 10
如果我要返回指定的结果集,我会使用这样的查询来执行此操作:
SELECT t.value1
, t.value2
FROM ( SELECT r.value1
FROM table r
WHERE r.value1 = 10
GROUP BY r.value1
HAVING COUNT(1) > 1
) s
JOIN table t
ON t.value1 = s.value1
如果我想在谓词中使用子查询(而不是连接操作),我可以这样做:
SELECT t.value1, t.value2
FROM tableX t
WHERE t.value1 = 10
AND (SELECT COUNT(*) FROM tableX r WHERE r.value1 = 10) > 1
以前的连接模式查询可以轻松扩展为返回多个值,我们可以将WHERE r.value = 10
替换为WHERE r.value IN (10,20,30)
。对于第二个查询,使用谓词中的子查询,不能轻易扩展,而不是没有(可能)调光相关子查询。
答案 1 :(得分:0)
试试这个: SELECT value1,value2 FROM table WHERE value1 in( SELECT value1 FROM table其中value1 = 10)和(select count(*)where value1 = 10)> 1