[英]How to Make Multiple Select with a Common Where Clause in Single Query?
[英]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.