我如何根据不在 SQL (sqlite) 中另一个 table 中的 ID 从一个 table 中 return 行?

How do I return rows from one table based on an ID NOT in another table in SQL (sqlite)?

您好,谢谢大家!!! (SQLITE)

我有 3 个表:旅行、中途停留、航班。一次 旅行 有很多 航班 ,还有很多 中途停留 。所有停留航班都通过PID与旅行相关联。

我需要 return 已选择的旅行 (Trips.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

上面的语句只是 returns all Trips with 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

上述声明有效,并且 returns 结果是 The Trip Has PIsSelected=1 和 FlightNumber 为 1892...我需要 return FlightNumber 不是 1892 的所有结果. 谢谢.

我上传了 2 个 txt 文件到云端硬盘(Trips.txt,和 Flights.txt) 根据 Whosebug 的建议,列数据由 2 个空格分隔。

https://drive.google.com/drive/folders/13qJJgxCR11qQ122mW6AJ5c-60VA-O4Vt?usp=sharing

旅行

航班

中途停留

没有一些示例数据很难弄清楚,但如果您的第二个查询有效,也许可以使用它?例如

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

传奇RB找到了答案。谢谢瑞克!!!

    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)

也感谢您 Emmanuel H. 的主要查询... 非常感谢...