SQL - 返回 ID 的所有行,其中一行满足条件 A、B 或 C

CGe*_*ain 2 sql sql-server teradata

我正在尝试返回特定 ID 的所有行,其中在与这些 ID 相关的任何一行中满足条件。请原谅我是 SQL 的新手......下面的示例:


  • ID * 行 * # *


  • 12*1*A*

  • 12*2*B*
  • 12*3*X*
  • 12*4*Y*
  • 15*1*A*
  • 15*2*B*
  • 15*3*C*

不确定除了我的选择和条件 = (X、Y 或 Z) 之外的代码是什么:


  • ID * 行 * # *


  • 12 * 1 * A * <-- 不包括 X、Y 或 Z 但它是 ID 的一部分

  • 12 * 2 * B * <-- 在该 ID 的另一行中有 X
  • 12*3*X*
  • 12*4*Y*

尽管不满足条件,但我想提取所有行记录,只要它们是具有满足条件的行的 ID 的一部分。

谢谢您的帮助!

* 编辑:包括尝试的代码*

SELECT ID
,LINE 
,#
    WHERE   ID,
IN (
SELECT ID
WHERE # IN ('X','Y','Z'))
Run Code Online (Sandbox Code Playgroud)

结果:

ID  LINE  #
12   3    X
12   4    Y
Run Code Online (Sandbox Code Playgroud)

我需要的:

ID  LINE  #
12   1    A
12   2    B
12   3    X
12   4    Y
Run Code Online (Sandbox Code Playgroud)

我几乎觉得我需要使用我的 IN('X','Y','Z') 条件创建一个 ID & LINE 的临时表,然后对所有 LINE(s) 而不是 X,Y 的 ID 进行内部连接, Z。我认为这可能有效,但我还没有学会如何使用临时表。我有点麻烦,因为我正在使用一个查询,我在这里简化了很多,我选择了 18 个加入其他 7 个表的字段。我认为这只是使我对子查询的理解复杂化,而不是子查询受其影响。

感谢大家到目前为止的帮助和答案!

scs*_*mon 5

IN为此,您可以使用子查询。

Select *
From YourTable
where ID in (select ID from YourTable where # in ('X','Y','Z'))
Run Code Online (Sandbox Code Playgroud)

请注意,12 * 4 * C *您的数据中没有,但我认为这只是您的结果中的一个类型,应该是12 * 4 * Y *