У меня есть приложение, которое использует SQLite для локального хранения данных. Может быть более одного файла, хранящего данные. Все файлы содержат список элементов, но только один из них имеет «правильный» статус для текущего пользователя (в основном, есть «пользовательская» база данных в $ HOME и «общесистемная» в / etc).
Обычно оба файла содержат один и тот же список элементов, и различается только столбец состояния. Однако, если любой из них содержит элементы, не входящие в оба, я тоже хочу эти данные.
SQLite не имеет ПОЛНОГО НАРУЖНОГО СОЕДИНЕНИЯ.
Решение, которое я нашел, заключается в следующем:
SELECT item, group_concat(status) AS status FROM (SELECT item,status FROM items UNION SELECT item,status FROM otherdb.items) GROUP BY item;
А затем анализирует разделенный запятыми вывод «status», чтобы получить «правильный» статус. Однако я хотел бы получить решение на чистом SQL.
Значения, которые я хочу получить для статуса:
If any = 1, status = 1
elif any = -1, status = -1
elif any = 2, status = 2
elif any = -2, status = -2
else status = 0 or NULL
статус может быть только (в db) -2, -1,0, NULL, 1,2, поэтому это охватывает все данные.
Если есть решение, которое дает только то, что одно не равно нулю и не равно нулю, это тоже может сработать, хотя я бы предпочел выше.