Получить конкретную «версию» столбца - PullRequest
0 голосов
/ 20 апреля 2009

У меня есть приложение, которое использует 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, поэтому это охватывает все данные.

Если есть решение, которое дает только то, что одно не равно нулю и не равно нулю, это тоже может сработать, хотя я бы предпочел выше.

Ответы [ 2 ]

1 голос
/ 11 июня 2009

Создать таблицу приоритетов состояния со следующими значениями

status  priority
  1       5
 -1       4
  2       3
 -2       2
  0       1
 NULL     0

Идея состоит в том, чтобы объединить две таблицы с этой таблицей StatusPriorty, сгруппировать записи и использовать MAX (приоритет) для получения результатов

1 голос
/ 14 мая 2009

Я бы предложил вам один подход:

1. создайте временную таблицу, один дополнительный столбец для флага "otherbd";
2. киньте туда все из 2 таблиц;
3. удалить ненужные строки;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...