簡體   English   中英

如何在單個查詢中調整多個“ where”子句?

[英]How can I adjust multiple 'where' clause in single query?

我有這個查詢,它從結果中給我以前的ID,但它包含多個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

如何調整此查詢以避免查詢中斷。 請幫忙

您的查詢語法錯誤,在LEFT JOIN ... ON ...之后的AND應該在WHERE運算符內,並將WHERE運算符與AND而不是WHERE結合在一起,通常每個SELECT都只有一個WHERE

嘗試這樣的事情:

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)

格式化查詢使其可讀性如果您在where子句中使用任何聚合函數,請使用

HAVING

我認為您不應有2個“ WHERE”語句。 在每個語句中將第二個“ WHERE”更改為“ AND”。

除非它是另一個查詢中的子查詢,否則您不能編寫多個where子句。 您可以根據需要通過放置“ AND”或“ OR”而不是其他“ WHERE”來調整查詢。

嘗試在下面的查詢中進行查詢(我將AND放在哪里,您可以根據需要調整AND。)

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

* 注意:*此查詢未經測試,僅用於您的想法。 它可能/可能不起作用。

謝謝

我建議您再次檢查MySQL中SELECT語法 ,因為您的查詢完全錯誤。

由於我不知道您想要檢索的數據庫結構和原始任務,因此我不確定結果是否正確。

但是在您的查詢中擺脫了過多性,我得到了以下信息:

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 

希望您能得到您所期望的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM