簡體   English   中英

(My)SQL查詢的“可選”WHERE子句

[英]“Optional” WHERE clause on (My)SQL query

我在MySQL中遇到一個SELECT查詢有點問題,我會感謝你的一些指示。 請隨時指出我現有的答案(如果有的話我錯過了)。

查詢目前如下:

SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id
WHERE ie.other_id = ? AND ue.unrelated_id = ?
ORDER BY ...

有三個表: eue

ieuee的關系,因此包含外鍵(e_id)。 表示輸入參數。

問題是ue.unrelated_id =? 部分。 真正想做的是:

  • 當且僅當unlated_id =?存在ue關系時才返回ue.ccc。 如果它不存在,我希望此字段為空。
  • 即使ulate關系為unrelated_id =? 如果不存在,此查詢應始終返回剩余的字段(即,對於other_id =?,保證存在)。

不幸的是,如果我刪除這個where子句,我會得到ue.ccc的“隨機”unrelated_id。 但是如果我保留它,如果這個unrelated_id不存在,查詢將不會返回任何結果! 我也嘗試添加OR ue.unrelated_id IS NOT NULL,但如果ue表為空,這會使查詢返回結果。

有任何想法嗎? 如果您需要進一步說明,請發表評論。 我應該在接下來的幾個小時內迅速回答。

你可以做兩件事之一:

SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id AND ue.unrelated_id = ?
WHERE ie.other_id = ? 
ORDER BY ...

要么

SELECT e.*, ie.aaa, ue.bbb, ue.ccc
FROM ie
LEFT JOIN e ON ie.e_id = e.e_id
LEFT JOIN ue ON ie.e_id = ue.e_id
WHERE ie.other_id = ? AND (ue.unrelated_id IS NULL OR ue.unrelated_id = ?)
ORDER BY ...

不過,我會選擇第一個查詢。

編輯:請注意,如果ue.unrelated_id不是可空列,則第二個查詢僅適用。

暫無
暫無

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

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