Допустим, у меня есть база данных товаров SQLite, чтобы ехать в поезде.
Моя база данных организована так:
Merchandise table
Merchandise ID
Name (some other info)
Train table
Train ID
(some other info)
Loading table
Train ID
Merchandise ID
Car number (0 for the locomotive and going down from there).
Какой будет правильный запрос, если я хочу найти конкретную последовательность автомобилей. Допустим, я знаю, в каких поездах две машины игрушек следуют друг за другом, а затем одна машина помидоров, а затем одна машина грязи.
(Мое приложение на самом деле не так, но это упрощает аналогию того, что мне действительно нужно ...)
РЕДАКТИРОВАТЬ ... после некоторой царапины на голове ...
Вот что у меня есть:
SELECT * FROM
(SELECT * FROM merchandise JOIN loading ON merchandise.merchandise_id=loading.merchandise_id WHERE name="toys") AS car1
JOIN (SELECT * FROM merchandise JOIN loading ON merchandise.merchandise_id=loading.merchandise_id WHERE name="toys") AS car2
ON (car2.position=car1.position+1) AND car1.train_id=car2.train_id
JOIN (SELECT * FROM merchandise JOIN loading ON merchandise.merchandise_id=loading.merchandise_id WHERE name="tomatoes") AS car3
ON (car3.position=car2.position+1) AND car2.train_id=car3.train_id
JOIN (SELECT * FROM merchandise JOIN loading ON merchandise.merchandise_id=loading.merchandise_id WHERE name="dirt") AS car4
ON (car4.position=car3.position+1) AND car3.train_id=car4.train_id
Мне нужно сделать немного больше тестов, но, похоже, все в порядке.
Не уверен, есть ли более эффективный способ, хотя (нужно взглянуть на детали 'EXPLAIN QUERY PLAN')