【发布时间】:2018-04-04 19:28:41
【问题描述】:
我写了一个查询,它会产生如下结果。
select t1.id as id,
CASE
WHEN t3.key_id is not null and t3.key_id='SILICA'
THEN t3.id
END as SILICA_ID,
CASE
WHEN t3.key_id is not null and t3.key_id='Mutual'
THEN t3.id
END as Mutual_ID
from table1 t1, table2 t2, table3 t3
where t1.id=t2.t1_id and t2.id=t3.t2_id and t3.key_id in ('SILICA','Mutual')
order by t1.id;
id SILICA_ID Mutual_id
== ========= =========
1 空 1234
1 3456 空
2 空 7890
2 2374 空
2 4587 空
2 空 3489
但是,我需要如下结果。
id SILICA_ID Mutual_id == ========= ========= 1 3456 1234 2 2345 7890 2 4587 3489我怎样才能做到这一点?
提前致谢
【问题讨论】:
-
不要使用逗号分隔的列表作为 from 子句。 25 多年前,人们采用了一个更好的标准。就连这银鬼也有足够的时间来改变。 trincot 的回答显示了更好的连接语法
-
来自 table t1, table t2, table t3 ?这是什么意思?这总是同一张桌子吗?
-
都是不同的表。
-
好的。现在请编辑您的请求。到目前为止,您正在显示一个查询结果,其中 id 1 有两条记录,id 2 有两条记录,以及您真正想要的结果(id 1 一行,id 2 一行)。请为 id 1 显示更多行的查询结果,并再次显示相应的所需结果。或者更好地提出一个新的请求,因为你已经得到了正确的答案,甚至接受了其中一个。
-
这些是奇怪的必需结果。为什么要将二氧化硅 2345 与互惠 7890 以及二氧化硅 4587 与互惠 3489 结合使用?例如,为什么不使用硅胶 2345 和相互 3489?您在这里应用的关系规则是什么?