Выбор строк со ссылками на таблицы в SQLite 3 - PullRequest
0 голосов
/ 23 февраля 2011

У меня есть база данных фото / альбомов SQLite с 3 таблицами:

Альбомы

 id   name           hide
--------------------------
 1    Holiday 2010   1
 2    Day Trip       0

Фотографии

 id   file
-----------------
 1    photo1.jpg
 2    photo2.jpg
 3    photo3.jpg
 4    photo4.jpg

Отношение (связывает фотографии с альбомами)

 album   photo
-----------------
 1       1
 1       2
 2       3
 2       1

Фотография может быть назначена нулю, одному или нескольким альбомам.В каждом альбоме есть столбец «Скрыть», который указывает, следует ли игнорировать фотографии этого альбома.

Я пытаюсь найти запрос SELECT, который возвращает все фотографии, которые не назначены альбому, + все фотографии в альбомах, которые не являются скрытыми (т. Е. Для их значения 'hide' установлено значение 0).

Я пришел с запросом, который выбирает фотографии в видимых альбомах, но я не знаю, как включить фотографии, которые не назначены для альбома:

SELECT file 
FROM photos, albums, relation 
WHERE photos.id = relation.photo 
  AND albums.id = relation.album 
  AND albums.hide = 0

Этозапрос возвращает:

photo1.jpg
photo3.jpg

Однако требуемый результат будет следующим:

photo1.jpg
photo3.jpg
photo4.jpg

Проблема в том, что photo4.jpg не назначен альбому в таблице Relation.Ты знаешь как это решить?

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 23 февраля 2011

Сначала вы вернетесь к фотографиям 1 и 3, поэтому я предполагаю, что это правильно.

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

SELECT file
FROM photos LEFT OUTER JOIN (relation join albums on relation.album = albums.id)
            ON relation.photo = photos.id
WHERE albums.hide = 0 OR albums.id IS NULL
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...