我有两个选择来过滤数据。它们并不复杂:
"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值第二个返回的集合无效)。
我尝试联合并交叉选择,但是您需要返回相同数量的列,这不可能发生,因为这些是完全不同的表。当我试图简单地将它们合并在一起时,我发现它很难,因为第二个选择语句是一个独特的选择而第一个不是。
我想知道我是否错过了将这些选择结合起来的技巧?
答案 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)