2016-12-09 53 views
1
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)之外的内容。其余的似乎工作正常。MySQL查询行为不如预期

为什么这样做?

+2

括号问题。 – 1000111

回答

2

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

试试这个:

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

在你给出的代码,它要么要求所有条件之前“或”是真实的,或毕竟条件“或”是真实的。因此,只要“或”之后的所有内容为真,第一个条件就可能是错误的,正如您所遇到的那样。

+0

现在不返回结果。 – Shenanigator

+0

@us我不知道你的数据。没有数据输入可能满足所有要求吗?还是你是积极的,应该有结果? – Michel

+0

我修好了,它不是你的改变,它是我的另一个我忘了我做了。现在正在工作。 – Shenanigator

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%')