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)。其余的似乎工作正常。
为什么要这样做?
最佳答案
我认为您的问题在于使用 AND 和 OR。
试试这个:
...
AND (p.Item_Description LIKE '%BMS%' OR p.Item_Description LIKE '%EPMS%')
AND ...
在您给定的代码中,它要么要求“或”之前的所有条件都为真,要么要求“或”之后的所有条件都为真。因此,只要“或”之后的所有内容都为真,第一个条件可能为假,正如您所经历的那样。
关于MySQL 查询未按预期运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41063211/