2012-10-23 30 views
-1

假设我在数据库中有两个表:Table1Table2SQL表达式从一个表中提取数据但涉及多个标准

Table1有以下栏目:

Var1 | Var2 

Table2有以下栏目:

Var3 | Var4 

我也有一个恒定的,x

现在,我想编写一个SQL表达式,包括Table1每一行满足以下条件:

Var1 = xthere is a row in Table2 where Var4=Var2 and where Var3=x

我怎样写为SQL表达式?

我想它应该从SELECT * FROM Table1 WHERE Var1=x开始,但从那里,我迷路了。

回答

1

您需要的魔法元素是一个UNION,它基本上将一个结果集附加到另一个结果集。

SELECT * 
FROM Table1 
WHERE Var1=x 

UNION 

SELECT * 
FROM Table1 
JOIN Table2 ON Table1.Var2 = Table2.Var4 
WHERE Table1.Var1 <> x -- this is to avoid dups of rows that satisfy both cases 
    AND Table2.Var3 = x 
+0

我想这对我实际发布的问题是正确的。但是,实际上,我有两个表格(有关列数的其他内容)不同,所以'union'声明不起作用。 – Speldosa

+0

您可以选择这两个表格之间的公共列或仅选择ID,将其保存在临时表格中,然后在每个表格上进行辅助选择以通过ID获取行。那有意义吗? – donebizkit

0
select t1.* from table1 t1, table2 t2, table3 t3 
where t1.id=1 and t2.year='2012' and t3.user='me' 
and t1.id = t2.id 

select t1.* from table1 t1 
inner join table2 t2 
on t1.var2=t2.Var4 
where t2.Var3 = x 

我觉得第二个是更容易满足您的需求。

+0

对不起,我不太明白这个答案。什么是t1?表格1?什么是table1呢? – Speldosa

+0

@Speldosa t1是表名table1的别名(它是一种缩写,而不是每次都使用table1 ** t1.id **表示** table1.id **) –

+0

您需要的操作是**加入**。 Union可以满足您在特定条件限制下的需求。也许你应该粘贴两个表结构,一些示例数据作为源和结果。 –