SELECT id,
account_id,
move_id
FROM account_move_line
WHERE account_id IN
(SELECT account_id
FROM account_move_line
GROUP BY account_id HAVING COUNT(id) > 1)
AND account_id = 1974
数据输出为:
______________________________
|id |account_id |move_id
| 41623 | 1974 | 8865
| 41624 | 1974 | 8865
| 45229 | 1974 | 9289
| 1208 | 1974 | 104
| 39628 | 1974 | 8168
| 39629 | 1974 | 8168
正如您在第一行和第二行中看到的那样,move_id
是相同的。
在输出的最后两行中,move_id
再次相同。
如何更新我的查询,即只有move_id
相同时输出才是?
因此,基本上应该没有ID为45229和1208的行。
答案 0 :(得分:1)
我认为您应使用MOV ID而不是如下的account_id-
SELECT
id,
account_id ,
move_id
FROM account_move_line
WHERE move_ID in
(
SELECT move_ID
FROM account_move_line
GROUP BY move_ID
HAVING COUNT(move_ID) > 1
)
AND account_id = 1974
答案 1 :(得分:1)
使用相关子查询
select id, account_id , move_id
from account_move_line a
where exists (select 1 from account_move_line b where a.move_id=b.move_id
group by b.account_id
having count(distinct id) > 1 and account_id = 1974)
and account_id = 1974
答案 2 :(得分:1)
如果您完全关心性能,我建议您仅使用exists
而不是在子查询中使用聚合。
所以:
SELECT aml.id, aml.account_id, aml.move_id
FROM account_move_line aml
WHERE aml.account_id = 1974 AND
EXISTS (SELECT 1
FROM account_move_line aml2
WHERE aml2.account_id = aml.account_id AND
aml2.move_id = aml.move_id AND
aml2.id <> aml.id
);