MySQL Query的行为不符合预期

时间:2016-12-09 15:00:23

标签: mysql sql

SELECT
    p.Requestor AS Requestor,
    p.AdjAmtOrd AS Amount_Ordered,
    p.Vendor_Name AS Vendor,
    p.Item_Description AS Item,
    p.Project AS Project,
    s.car_number,
    p.PO_Year AS PO_Year,
    p.AcctType AS Account_Type,
    p.budget_sublines,
    s.car_type,
    s.requester,
    s.fbn
FROM
    Redshift_PO_Report p
INNER JOIN Redshift_MCL s ON p.Project = s.car_number
WHERE
    s.car_type LIKE 'Datacenter or Room Build - Leased%'
AND p.AcctType = 'CapEx%'
AND s.controls > '0'
AND p.Item_Description LIKE '%BMS%'
OR p.Item_Description LIKE '%EPMS%'
AND p.budget_sublines IN ('BMS', 'EPMS');

问题是它在car_type中返回的行除了'Datacenter ...'以外的东西,而不是AcctType中的CapEx(在这种情况下是OpEx)。其余的似乎工作正常。

为什么这样做?

2 个答案:

答案 0 :(得分:2)

更改

AND p.Item_Description LIKE '%BMS%'
        OR  p.Item_Description LIKE '%EPMS%'

AND (p.Item_Description LIKE '%BMS%'
        OR  p.Item_Description LIKE '%EPMS%')

答案 1 :(得分:2)

我相信您的问题是使用AND和OR。

试试这个:

...
AND (p.Item_Description LIKE '%BMS%' OR  p.Item_Description LIKE '%EPMS%')
AND ...

在您给定的代码中,它要么需要"或"之前的所有条件。为真,或在"或"之后的所有条件是真实的。因此,正如您所经历的那样,第一个条件可能是假的,只要在"或"之后的所有内容都是如此。是真的。