2013-05-14 99 views
1

我有这个查询,它给了我以前的结果id,但它包含多个where子句。如何在单个查询中调整多个'where'子句?

SELECT DISTINCT Contacts.cm_id 
    FROM Contacts 
    LEFT JOIN Employee ON (Contacts.cm_id = Employee.ei_contact_id) AND (Employee.ei_primary_employer = "Y") 

WHERE (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' 
    AND CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 

WHERE Contacts.cm_id < (
    SELECT DISTINCT Contacts.cm_id 
     FROM Contacts 
     LEFT JOIN Employee ON (Contacts.cm_id = Employee.ei_contact_id) AND (Employee.ei_primary_employer = "Y") 
     WHERE (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' AND CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 
     WHERE Contacts.cm_id='77') 

ORDER BY Contacts.cm_id DESC LIMIT 1 

它给我这个error

'WHERE Contacts.cm_id='313')) ORDER BY Contact_Master.cm_id DESC LIMIT 1' at line 10 

如何调整这个查询,以避免查询休息。 请帮助

+1

你不能使用多个WHERE,你应该只使用AND OR等......在WHERE后 – CodeBird 2013-05-14 10:51:50

回答

1

你的查询语法北京时间错了,ANDLEFT JOIN ... ON ...后应该在WHERE caluse内,并且每次将WHERE caluses与AND而不是WHERE合并,通常您只有一个WHERE每个SELECT

尝试是这样的:

SELECT DISTINCT Contacts.cm_id 
FROM Contacts LEFT JOIN Employee 
    ON (Contacts.cm_id = Employee.ei_contact_id) 
WHERE (Employee.ei_primary_employer = "Y") 
    AND (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' 
    AND CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 
    AND Contacts.cm_id < 
    (SELECT DISTINCT Contacts.cm_id 
     FROM Contacts LEFT JOIN Employee 
      ON (Contacts.cm_id = Employee.ei_contact_id) 
     WHERE (Employee.ei_primary_employer = "Y") 
     AND (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' 
     AND CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 
     AND Contacts.cm_id='77') ORDER BY Contacts.cm_id DESC LIMIT 1) 
+0

它应该只返回值,你使用LIMIT 1 – CloudyMarble 2013-05-14 12:35:06

0

格式的查询,使其可读 如果使用WHERE子句中的任何聚合函数,使用

HAVING

0

我认为你不应该有2个 'WHERE' 语句。在每个语句中将第二个'WHERE'更改为'AND'。

0

除非是另一个查询中的子查询,否则不能写多个where子句。您可以根据您的需要,通过放置“AND”或“OR”而不是其他WHERE来调整您的查询。

试试下面的查询(我将和代替WHERE,您可以根据自己的需要调整。)

SELECT DISTINCT Contacts.cm_id FROM Contacts 
LEFT JOIN Employee ON (Contacts.cm_id = Employee.ei_contact_id) AND 
(Employee.ei_primary_employer = "Y") 

WHERE (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' AND 
CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 
AND Contacts.cm_id < (SELECT DISTINCT Contacts.cm_id FROM Contacts LEFT JOIN Employee 
ON (Contacts.cm_id = Employee.ei_contact_id) AND (Employee.ei_primary_employer = "Y") 
AND (CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' AND 
CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) NOT LIKE 'NULL') 
AND Contacts.cm_id='77') 
ORDER BY Contacts.cm_id DESC LIMIT 1 

* 注:*此查询不是测试,只是给你看理念。它可能会/可能不工作。

谢谢

0

我建议你再次检查syntax of SELECT in MySQL,因为你的查询是完全错误的。

由于事实我不知道数据库结构和原始任务你想要检索,我不确定结果是否正确。

但得到您的查询中摆脱过头的我得到这个:

SELECT MAX Contacts.cm_id as cm_id FROM Contacts LEFT JOIN Employee ON (Contacts.cm_id = Employee.ei_contact_id) WHERE Employee.ei_primary_employer = "Y" AND CONCAT(Contacts.cm_fname," ", Contacts.cm_lname) LIKE '%Recee Dawn%' AND Contacts.cm_id < 77 

希望你会得到你所期望的。