[英]sql left join with condition
我在Android中使用SQLite遇到此問題:
從項目我應該得到:
1)標題字段包含字符串的所有項目。 示例'%sho%'
2)檢查項目是否屬於給定項目(22)
project
┌───┬─────────┐
│ id│idProject│
├───┼─────────┤
│ 1 │ 1 │
│ 2 │ 22 │
└───┴─────────┘
items projectitems
┌───┬──────┐ ┌───┬─────────┬─────────┐
│id │ title│ │ id│ idItem │idProject│
├───┼──────┤ ├───┼─────────┼─────────┤
│10 │ show1│ │ 1 │ 10 │ 22 │
│11 │ show2│ │ 2 │ 11 │ 22 │
│12 │ show3│ │ 3 │ 12 │ 22 │
│13 │ show4│ │ 4 │ 10 │ 1 │
│14 │ show5│ │ 5 │ 11 │ 1 │
│15 │ show6│ │ 6 │ 12 │ 1 │
└───┴──────┘ └───┴─────────┴─────────┘
我嘗試了這個:
SELECT
e.id, e.title, l.idProject
from
items as e
LEFT JOIN projectitems as l
on e.id = l.idItem
WHERE
e.title LIKE '%sho%' AND l.idProject = 22
ORDER BY
e.title ASC
我得到的結果是:
id title idProject
10 show1 22
11 show2 22
12 show3 22
我想要的結果:
id title idProject
10 show1 22
11 show2 22
12 show3 22
13 show4 (null)
14 show5 (null)
15 show6 (null)
另外,如果您知道實現此目標的其他方法,請告訴我。 謝謝。
只需將條件從WHERE
子句移到ON
:
SELECT
e.id, e.title, l.idProject
from
items as e
LEFT JOIN projectitems as l
on e.id = l.idItem
and l.idProject = 22
WHERE
e.title LIKE '%sho%'
ORDER BY
e.title ASC
您必須將l.idProject = 22
移到ON
子句:
SELECT
e.id, e.title, l.idProject
from
items as e
LEFT JOIN projectitems as l
on e.id = l.idItem AND l.idProject = 22
WHERE
e.title LIKE '%sho%'
ORDER BY
e.title ASC
將謂詞放在WHERE
子句中會將LEFT JOIN
轉換為INNER JOIN
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.