У меня следующая схема
CREATE TABLE BookImage (Id UNSIGNED BIG INT, ImageId UNSIGNED BIG INT, IsDefault INT,
PRIMARY KEY(Id, ImageId));
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (1,10,0);
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (1,11,1);
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (1,12,0);
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (2,20,0);
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (2,21,0);
INSERT OR IGNORE INTO BookImage(Id,ImageId,IsDefault) VALUES (2,22,0);
Моя цель - получить запрос SELECT для поиска (ImageId, Id) для данного «Id», например:
- , если IsDefault = 1, затем вернуть строку
- , если IsDefault = 0, затем вернуть строку с наименьшим ImageId
Для данной таблицы, если я запрашиваю с Id = 1, он должен возвращать только (11,1) если я запрашиваю с Id = 2, он должен возвращать только (20,2), потому что для Id = 2 нет IsDefault = 1.
Мне нужен запрос выбора sqlite для этого. Я попробовал запрос из этого сообщения , но он не работает
SELECT *
FROM BookImage
WHERE Id=1 AND IsDefault=1
UNION ALL
SELECT *
FROM BookImage
WHERE Id=1 ORDER BY ImageId ASC LIMIT 1 AND NOT EXISTS (
SELECT *
FROM BookImage
WHERE Id=1 AND IsDefault=1 LIMIT 1
)
http://sqlfiddle.com/#! 5 / e094e / 1/0