sqlite select query - PullRequest
       0

sqlite select query

1 голос
/ 22 ноября 2010

Я работаю в Android с SQLite.

В моей базе данных есть 2 таблицы:

Table 1: cars

_id(int,pri-key)
reg(text)
type(text)

Table 2: jobs

_id(int,foreign-key)
date(date)

Мне нужна квлит-оценка, которая даст мне все машины, на которых НЕ была работапоследние 3 недели.Я на самом деле портирую приложение из c #, и для этого я использую (в MySQL) оценку:

SELECT c.id, c.reg, c.type FROM buses c WHERE NOT EXISTS (SELECT NULL FROM jobs j WHERE j.id = c.id AND j.date >= CURRENT_DATE - INTERVAL 21 DAY

Но объект SqliteDataBase, с которым я работаю в Android, принимает другой формат. Как мне выполнить этот запрос??

Заранее спасибо.

1 Ответ

2 голосов
/ 22 ноября 2010

Я бы попробовал что-то вроде этого:

SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id WHERE B._id IS NULL OR B.date < date('now', '-21 days');

LEFT OUTER JOIN, обеспечивает отображение всех значений из таблицы автомобилей в выходных данных (включая те, которые несоответствовать критериям объединения - то есть тем, которые не имеют записи в таблице заданий).Критерии WHERE, фильтры либо для тех, у которых нет записи в таблице вакансий (B._id IS NULL), либо для тех, которые старше 21 дня B.date < date('now', '-21 days')

Конечно, я предполагаю, чтобудет только 1 запись в таблице заданий для каждого автомобиля.Если их будет больше, вы, вероятно, захотите использовать MAX для получения самой последней даты.

РАБОЧЕЕ РЕШЕНИЕ: SELECT * from cars A LEFT OUTER JOIN jobs B on A._id = B._id GROUP BY A._id HAVING B._id IS NULL OR MAX(B.date) < date('now', '-21 days');

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