我在Android中使用SQLite遇到了这个问题:
从项目我应该得到:
1)标题字段包含字符串的所有项目。例子'%笑%'
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)
另外,如果你知道不同的方法来实现这一点,请告诉我。 感谢。
答案 0 :(得分:2)
只需将标准从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
答案 1 :(得分:2)
您必须将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
。