我有以下SQL表列...
id | item | position | set
---------------------------
1 | 1 | 1 | 1
2 | 1 | 1 | 2
3 | 2 | 2 | 1
4 | 3 | 2 | 2
在单个查询中,我需要获取与set='1'
匹配的所有行ID,同时计算同一个表中引用item
个数的实例数量无论set
。
到目前为止,我一直在修补......
SELECT
j1.item,
(SELECT count(j1.item) FROM table_join AS j2) AS count
FROM
table_join AS j1
WHERE
j1.set = '1';
...虽然子查询返回多行。使用上述数据,第一项应该有2,所有其他项应该有1。
答案 0 :(得分:3)
这应该有效:
SELECT
j.id
, (SELECT COUNT(*) FROM table_join i WHERE i.item = j.item) AS count
FROM table_join j
WHERE set='1'
这与您的查询类似,但子查询与带有WHERE
子句的外部查询协调。
答案 1 :(得分:2)
作为一种值得测试性能的替代方法,您可以使用JOIN
而不是依赖子查询;
SELECT tj.id, COUNT(tj2.id) count
FROM table_join tj
LEFT JOIN table_join tj2 ON tj.item = tj2.item
WHERE tj.`set`=1
GROUP BY tj.id