[英]Limit LEFT JOIN results to 1 with flexible where clause
我的查詢如下所示:
SELECT
count(users.id)
FROM users
LEFT JOIN mail_sender_jobs_actions ON mail_sender_jobs_actions.userID = users.id
LEFT JOIN table2 ON table2.userID = users.id
LEFT JOIN table3 ON table3.userID = users.id
WHERE {$flexibleWhereClause}
現在,mail_sender_jobs_actions表可以(不需要返回任何內容)返回多個條目。 我不想對結果進行分組,但仍將mail_sender_jobs_actions的返回限制為1,因此我不會得到重復...否則計數將無法正常工作。
我想保持where子句的靈活性,因此報廢了整個Web,卻發現沒有任何工作對我有用。 有什么辦法嗎?
編輯
所以解釋一下情況。 我們有一個包含用戶(用戶)的表。 我們有一個包含動作的表(mail_seder_jobs_actions)。 我們還有與此查詢不相關的其他表(table1,table2,table3)
如果用戶執行操作,則將在操作表中創建一個條目。
where子句很靈活,這意味着有人可能只想向用戶顯示特定的操作。
動作也可能與用戶無關,因此該條目將被忽略。
使用where准則時,使用左聯接毫無意義,因為where准則適用於右側表,因此可以將左聯接有效地轉換為內部聯接。
顯然,您不使用右側表中的任何列,因此,我將使用一個exist存在子查詢代替使用聯接。
SELECT 1 as count, users.email FROM users WHERE EXISTS (SELECT 1 FROM mail_sender_jobs_actions WHERE mail_sender_jobs_actions.userID = users.id AND mail_sender_jobs_actions.type = '1' AND mail_sender_jobs_actions.jobID = '106' AND {$flexibleWhereClause})
但是,擁有count()毫無意義,因為它將始終返回1。如果要計算每個用戶在mail_sender_jobs_actions
表中擁有的記錄數,則必須使用左連接,分組並在其中移動加入條件的標准:
SELECT
count(mail_sender_jobs_actions.userID),
users.email
FROM users
LEFT JOIN mail_sender_jobs_actions ON mail_sender_jobs_actions.userID = users.id
AND mail_sender_jobs_actions.type = '1'
AND mail_sender_jobs_actions.jobID = '106'
AND {$flexibleWhereClause}
GROUP BY users.email
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.