У меня есть два типа предметов, допустим, это автомобили и пассажиры.У меня есть таблица для автомобилей и таблица для пассажиров.
Я хочу иметь возможность хранить ассоциации этих элементов, и для этого я использую другую таблицу, называемую «Соединения».Схема выглядит следующим образом:
Item1ID INT,
Item1Type INT,
Item2ID TEXT,
Item2Type INT,
PRIMARY KEY(Item1ID, Item2ID)
Столбцы Item1Type и Item2Type содержат значение перечисления, используемое для определения типа элемента при его поиске.Например: если я хочу связать Car1 с пассажиром A и пассажиром B, в таблице могут быть две записи:
Item1ID, Item1Type, Item2ID, Item2Type
Car1 ItemTypes.Car PassengerA ItemTypes.Passenger
Car1 ItemTypes.Car PassengerB ItemTypes.Passenger
Проблема, с которой я столкнулся, заключается в том, что я также хочу связать автомобили с пассажирами, поэтому PassengerB может бытьсвязан с автомобилем C и автомобилем D, но также и с автомобилем A. У меня уже есть запись для автомобиля A и эти две дополнительные ассоциации для сопоставления PassengerB с CarC и CarD:
Item1ID, Item1Type, Item2ID, Item2Type
PassengerB ItemTypes.Passenger CarC ItemTypes.Car
PassengerB ItemTypes.Passenger CarD ItemTypes.Car
Что мне нужно сделать, этонайти все связанные записи для Пассажира B, поэтому в виде псевдо SQL (с использованием SQlite) это будет:
SELECT * FROM Cars c
LEFT JOIN Pairings p ON
(c.CarID = p.Item1ID AND p.Item1Type = @CarPairingType)
OR (c.CarID = p.Item2ID AND p.Item2Type = @CarPairingType)
Так что мне нужно выполнить внутреннее соединение в любом поле, вроде какпереключатель, в зависимости от того, является ли тип 0 или 1. Это возможно, или есть лучший способ приблизиться к этому?