2016-02-14 2 views
0

У меня есть эта проблема с SQLite в Android:SQL покинул присоединиться с условием

От пунктов я должен получить:

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) 

Также, если вы знаете разные подходы к достижению этого, дайте мне знать. спасибо.

sqlfiddle

ответ

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 
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 

Размещение сказуемое в предложении WHERELEFT JOIN в INNER JOIN.

Смежные вопросы