如何排除在另一列 SQL 中引用数据的行

问题描述 投票:0回答:1

我需要帮助解决排除匹配行的问题。

我有一个有多列的表,该表引用一次旅行,行可以包含完整旅行、旅行的第一部分或旅行的第二部分的数据。

表格示例 1

在此表中,“SC_ID”和“SOL_ID”是独立的数字,“REF”可能包含另一条线路的“SOL_ID”的参考值(将行程的第一部分与第二部分链接)。 此列“REF”可以为空,可以是任何内容,也可以是“SOL_ID”编号。

我想要的是 atable 的 select 语句,其中排除所有引用“REF 到另一个“SOL_ID”的行,以及“REF”中由其“SOL_ID”引用的所有行。

基于示例表:SC_ID 100.500 和 100.502 应从选择视图中排除,因为它们已被引用。 结果应该只是: 2

总结一下我不想展示的内容: 如果“REF”为空,但该行的“SOL_ID”位于表中任何其他“REF”中,则应从选择中排除该行。 如果存在“REF”,并且它是表中的“SOL_ID”,则应从选择中排除此行。

总结一下我想展示的内容: 所有“REF”为空且其“SOL_ID”不存在于其他数据的“REF”列中的数据。 表中所有具有“REF”值但不是“SOL_ID”的数据。

我尝试过自连接、左连接...... 但问题是行程的第二部分继续显示(带有 REF 的行以及先前行程的 SOL_ID)或根本没有值。或者也许只是一团糟,因为它是所有人的一张桌子......

SELECT * 
FROM travel_history th1 
JOIN travel_history th2 on th1."SOL_ID" = th2."SOL_ID"
WHERE
(th1."REF" is null and th1."SOL_ID" not in th2."REF")
and
th1."REF" not in th2."SOL_ID";
sql select
1个回答
0
投票

此校正显示可以为您带来您想要的结果

SELECT * 
FROM travel_history th1 
INNER JOIN travel_history th2 on th1.SOL_ID = th2.SOL_ID
WHERE
  th1.SOL_ID not in (SELECT REF from travel_history)
  AND
  th1.REF not in  (SELECT SOL_ID from travel_history)

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.