Здравствуйте и СПАСИБО ВСЕМ!!! (SQLITE)
У меня есть 3 таблицы: Trips, Layovers, Flights. Один Путешествие имеет много Авиабилеты и много Остановки. Все Остановки и Авиабилеты связаны с Путешествие через PID.
Мне нужно вернуть выбранные поездки (Trips.PIsSelected=1) И ИСКЛЮЧИТЬ ВСЕ поездки, ГДЕ ПРИСУТСТВУЕТ FlightNumber.
SELECT t.* FROM Trips AS t
LEFT JOIN Flights AS f ON t.PID = f.PID WHERE
(f.FlightNumber <> 1892 AND t.PIsSelected = 1) GROUP BY f.PID
Приведенный выше оператор просто возвращает все поездки с t.PIsSelected = 1... Я могу сделать обратное, и приведенный ниже оператор работает (но это не то, что я хочу (ниже)).
SELECT t.* FROM Trips AS t
LEFT JOIN Flights AS f ON t.PID = f.PID WHERE
(f.FlightNumber = 1892 AND t.PIsSelected = 1) GROUP BY f.PID
Заявление выше работает и возвращает результаты, где The Trip Has PIsSelected=1 и FlightNumber 1892... Мне нужно вернуть все результаты, где FlightNumber НЕ ЯВЛЯЕТСЯ 1892. Спасибо.
Я загрузил на Диск 2 текстовых файла (Trips.txt и Flights.txt). Данные столбца разделены двумя пробелами в соответствии с рекомендациями StackOverflow.
https://drive.google.com/drive/folders/13qJJgxCR11qQ122mW6AJ5c-60VA-O4Vt?usp=sharing
Спасибо ВБока. Это просто опечатка на этом форуме. Я исправил опечатку.
Как таблица Layovers связана с вашим требованием. Вы не используете его ни в одном из своих запросов. Публикуйте образцы данных и ожидаемые результаты в табличном формате, а не в изображениях.
Так что извините за форпас. Я нуб :( Понятно - изображения плохие ... Я не уверен, что знаю правильный формат, но я посмотрю на добавление данных «табличного формата». Таблица Layover связана, так как я буду внутренне присоединяться к этой таблице один раз Я понимаю, почему мой « <> » не возвращает правильные данные. Пытаюсь сделать «Проблему» простой. Я боялся, что слишком сложная проблема может привести к комментариям, связанным с чем-то, что меня не волнует. Я удалю указанное изображение. . Спасибо Спасибо.
Трудно понять это без некоторых примеров данных, но если ваш второй запрос работает, может быть, использовать его? Например
SELECT * from Trips where PID NOT IN (
SELECT t.PID FROM Trips AS t
LEFT JOIN Flights AS f ON t.PID = f.PID WHERE
(f.FlightNumber = 1892 AND t.PIsSelected = 1) GROUP BY f.PID
)tmp and t.PIsSelected = 1
Спасибо Эммануэль! Я пытаюсь это сделать (это не работает, но этот формат внутреннего оператора выбора может быть ключом к ответу. И я смотрю, как добавить данные в форум StackedOverflow - я не знал, что могу это сделать
Я загрузил некоторые данные на свой Диск. См. Ссылку в исходном сообщении. Спасибо!
У меня возникли проблемы с выполнением вашего запроса, потому что он имеет «группу по», но выбирается из t.*. Может быть, это вызывает вашу проблему? Попробуйте удалить группу. Если вам нужны уникальные поездки, попробуйте SELECT DISTINCT t.* FROM...
Спасибо Эммануэль !!!- попробую SELECT DINTINCT. Трудно обдумать этот вопрос, но кажется таким простым. Если есть FlightNumber, соответствующий оператору <>, мне нужно удалить всю строку Trip из возвращаемого результата (Trips.PID).
Легендарный РБ нашел ответ. Спасибо Рик!!!
SELECT t.* FROM Trips AS t
WHERE t.PIsSelected = 1 AND NOT EXISTS
(SELECT 1 FROM Flights f WHERE f.PID = t.PID AND f.FlightNumber = 1892)
Также спасибо, Эммануэль Х., за ваши наводящие вопросы ... Высоко ценим...
Я думаю, что ни один из ваших кодов не работает из-за дополнительной скобки?