2012-02-23 38 views
2
select value1 as value from T1 where id=10; 

之一 - 执行另一个查询:合并两个查询和返回,如果<code>id</code>不<code>T1</code>存在的可能值

select value2 as value from T2 where id=10; 

所以,我想加入这些查询并返回一个值(value1value2)。可能吗?

SOLUTION:

我的解决办法:

select ifnull(value1, value2) as value from T1 left join T2 using(id) where id=10; 
+1

有总是在T2中的条目,或将有如果T1中没有条目,那么只有T2中才有条目?对T1的记录有偏好吗? – 2012-02-23 06:39:21

+0

'T1'不能包含所需的id,相对于'T2' – Opsa 2012-02-23 06:44:40

+0

偏好隐含的问题 - “如果id不存在于T1 ...” – ninesided 2012-02-23 06:44:50

回答

2

TRY(测试)

SELECT COALESCE(t1.value1, t2.value2) AS Value FROM t1 
INNER JOIN t2 USING(id) 
WHERE id=10 

这将经常检查第一表T1ID = 10,请参阅表t2 t2对于相同的编号

使用聚结操作引述FROM

被定义替换两个公共列中的单一结果列 。即,对于两个t1.a和t2.a的 得到的单连接列一个被定义为= COALESCE(t1.a,t2.a)

3

您可以使用工会

select value1 as value from T1 where id=10 
union 
select value2 as value from T2 where id=10; 

结果加入查询,你可以得到或值中的任何一个都

+0

Thx,但如何筛选结果并得到只有一个值? – Opsa 2012-02-23 06:46:02

+0

您可以根据您从查询中得到的结果集在应用程序级别轻松完成此操作 – 2012-02-23 06:58:16

0

使用双方

0象下面这样:

select t1.id from table1 as t1 where id=10 
union 
select t2.id from table2 as t2 where id=10 
1

你可以加入这两个查询的id场,然后使用COALESCE功能两个结果字段合并到输出。

虽然这里假定您已经有了一个要加入的ID列表。否则,你会被困在做一个工会或全面加入来首先得到这样一个清单。

1

如果没有价值,那么你可以使用这个太

select Distinct(s1.id) from sample1 as s1 inner join sample2 as s2; 
相关问题