0

我有这些桌子

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 的用户

4

2 回答 2

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)
于 2015-07-31T07:44:14.000 回答
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

谢谢你。

于 2015-07-31T07:26:53.647 回答