结合两个不同的select语句,一个与另一个不同

时间:2012-02-08 10:48:42

标签: sql

我有两个选择来过滤数据。它们并不复杂:

"SELECT * FROM StevesTable t WHERE "
"t.data1 = '%s' AND "
"t.data2 = to_date('%s','DD/MM/YYYY');",
strdata1,
dtDate.Format();

SELECT distinct data1 FROM anothertable ftt
join table1 tab on tab.somedata = ftt.somedata
where tab.somedata = 0
and tab.someotherdata = 1

我想将这两个结合起来,因为我需要通过第二个中的返回字段从第一个select语句中过滤返回的数据集(即,如果第一个集合中返回的记录没有包含在第一个集合中的data1值第二个返回的集合无效)。

我尝试联合并交叉选择,但是您需要返回相同数量的列,这不可能发生,因为这些是完全不同的表。当我试图简单地将它们合并在一起时,我发现它很难,因为第二个选择语句是一个独特的选择而第一个不是。

我想知道我是否错过了将这些选择结合起来的技巧?

2 个答案:

答案 0 :(得分:4)

您需要的是一个SQL子查询:

SELECT * FROM StevesTable t 
WHERE t.data1 = '%s' 
AND t.data2 = to_date('%s','DD/MM/YYYY')
AND t.data1 in (select distinct data1 FROM anothertable ftt
    join table1 tab on tab.somedata = ftt.somedata
    where tab.somedata = 0
    and tab.someotherdata = 1)

在那里,您检查第一个选择中的所有记录在第二个集合中是否具有data1值。

答案 1 :(得分:3)

您可以使用EXISTS条件执行此操作:

SELECT * FROM StevesTable t 
WHERE t.data1 = '%s' AND 
      t.data2 = to_date('%s','DD/MM/YYYY') AND
      EXISTS (select null
              from anothertable ftt
              join table1 tab on tab.somedata = ftt.somedata
              where tab.somedata = 0 and 
                    tab.someotherdata = 1 and
                    ftt.data1 = t.data1)
相关问题