2017-06-06 68 views
0

我有一个查询MySQL的where子句没有返回预期值

SELECT * 
FROM hayabusa.customer_staging 
WHERE tin = "888-596-592" 
     OR gsis_sss_no = "bp0279638" 
     OR last_name LIKE "%dela cruz%" 
     OR first_name LIKE "%jose%" 
     OR date_of_birth = "8/8/1978" 
     OR gender = "male" 
      AND parent_id = 0 
      AND is_proccessed = 0 
      AND id > 27 
      AND (filename = "sample cif csv file - copy.csv" 
        OR filename = "sample cif csv file2.csv") 
GROUP BY tin, 
      gsis_sss_no, 
      last_name, 
      first_name, 
      date_of_birth, 
      gender 
ORDER BY CASE 
      WHEN tin = "888-596-592" THEN 1 
      ELSE 2 
      end, 
      id 
LIMIT 1; 

但它返回一排3的idfilename这不是where子句。它有什么问题?

+0

当您使用OR和AND时,请始终使用禁忌符号。尝试添加这些,一切都应该很好 –

+0

你能分享你认为不正确的完整记录吗? –

回答

1

我认为AND在MySQL(和大多数数据库)中的优先级高于OR,所以你当前的查询将把你的AND条件视为可选的文件名。尝试重写WHERE条款,因为这:

WHERE 
    (tin = "888-596-592" 
    OR gsis_sss_no = "bp0279638" 
    OR last_name LIKE "%dela cruz%" 
    OR first_name LIKE "%jose%" 
    OR date_of_birth = "8/8/1978" 
    OR gender = "male") 
     AND parent_id = 0 
     AND is_proccessed = 0 
     AND id > 27 
     AND (filename = "sample cif csv file - copy.csv" 
       OR filename = "sample cif csv file2.csv") 

另外,我不知道你打算选择哪些列,但使用SELECT *这里可能是不合适的。相反,你应该列出你想要选择的列。严格地说,只有GROUP BY子句中出现的列或聚合函数内部的列才有资格在查询中进行选择。

+0

谢谢!有效! –