如何在SQL中使用查询中的子查询?

时间:2013-09-16 18:03:42

标签: sql subquery

我对SQL很新,并且无法生成正确的信息。我有一个包含FinishedGood部件号和ProductClassCode的数据集。我正在寻找的是所有带有多个ProductClassCode的FinishedGood零件编号,其中一个是'WU'。我可以运行查询来查找所有的ProductClassCode等于WU:

select finished_good
from FFTGGM.data_attributes_ext
where prodclass_cd = 'WU'

但我无法弄清楚如何使用该查询将其与所有FinishedGood进行比较,以生成一个FinishedGood的列表,其中ProdClasssCode为'WU'等等。我知道我可以将它用作子查询,但我不确定如何获得正确的查找顺序。有什么建议吗?

- 编辑 -

一些示例数据:

sample data

2 个答案:

答案 0 :(得分:1)

或者你可以这样做:

where prodclass_cd in (select distinct prodclass_cd from prodclasstable)

WHERE子句中的条件可以是动态的。

答案 1 :(得分:0)

您可以使用IN子句或EXISTS子句:

select *
from FFTGGM.data_attributes_ext
where finished_good in
(
  select distinct finished_good
  from FFTGGM.data_attributes_ext
  where prodclass_cd = 'WU'
)

select *
from FFTGGM.data_attributes_ext A
where 
EXISTS (
  select finished_good
  from FFTGGM.data_attributes_ext B
  where A.finished_good=B.finished_good
    and prodclass_cd = 'WU'
)

如果您只想要有“WU”的成品并且还有其他非WU产品类,您可以进行两次检查,如下所示:

select *
from FFTGGM.data_attributes_ext A
where 
EXISTS (
  select finished_good
  from FFTGGM.data_attributes_ext B
  where A.finished_good=B.finished_good
    and prodclass_cd = 'WU'
)
and 
EXISTS (
  select finished_good
  from FFTGGM.data_attributes_ext B
  where A.finished_good=B.finished_good
    and prodclass_cd <> 'WU'
)