我有这些表
Irasai表
invoice_nr | pard_suma | pard_vad | pirk_vad
1122 200 2,4,6 2,1,3
1111 502,22 3 4
1112 5545 3 4,1
54151 1000 2 1
74411 1345,78 6 18
Apmokejimai表:
id | invoice_nr | suma | tipas
1 1122 100 2
2 1112 5545 1
3 1122 100 2
4 1111 310 2
5 54151 200 2
此查询:
select t1.invoice_nr, max(t1.pard_suma) as pardtotal, sum(t2.suma) as sumatotal
from irasai t1
left join apmokejimai t2 on t1.invoice_nr = t2.invoice_nr
WHERE t2.tipas != '1'
OR t2.tipas IS NULL
AND FIND_IN_SET(1, t1.pirk_vad)
OR FIND_IN_SET(1, t1.pard_vad)
group by invoice_nr
having pardtotal <> sumatotal or sumatotal is null
结果如下:
invoice_nr | pard_total | sumtotal
1111 502.22 310
54151 1000 200
应该是这样的
invoice_nr | pard_total | sumtotal
54151 1000 200
我需要得到这个,因为它属于id为1的用户
答案 0 :(得分:1)
您需要使用括号将WHERE
子句中的条件分组。
select t1.invoice_nr, max(t1.pard_suma) as pardtotal, sum(t2.suma) as sumatotal
from irasai t1
left join apmokejimai t2 on t1.invoice_nr = t2.invoice_nr
WHERE (t2.tipas != '1'
OR t2.tipas IS NULL)
AND (FIND_IN_SET(1, t1.pirk_vad)
OR FIND_IN_SET(1, t1.pard_vad))
group by invoice_nr
having pardtotal <> sumatotal or sumatotal is null
如果没有括号,AND
的优先级高于OR
,因此它被解释为
WHERE t2.tipas != 1
OR (t2.tipas IS NULL
AND
FIND_IN_SET(1, t1.pirk_vad))
OR FIND_IN_SET(1, t1.pard_vad)
答案 1 :(得分:0)
我修改了你的SQL。这些都可行。
select invoice_nr, max(pardtotal), sumatotal from (
select t1.invoice_nr, max(t1.pard_suma) as pardtotal, sum(t2.suma) as sumatotal
from irasai t1
left join apmokejimai t2 on t1.invoice_nr = t2.invoice_nr
WHERE t2.tipas != '1'
OR t2.tipas IS NULL
AND FIND_IN_SET(1, t1.pirk_vad)
OR FIND_IN_SET(1, t1.pard_vad)
group by invoice_nr having pardtotal <> sumatotal or sumatotal is null
) a
谢谢。