用于合并表并产生结果的 SQL 查询

标签 sql oracle

Person_Tbl

PersonID |  Name
------------------
101      |  Stefan
102      |  Andreas

PersonDescription_Tbl

PDId | PersonId |  Desc   | Lang
---------------------------
1    | 101      | Hello  | en
2    | 101      | Hallo  | de 
3    | 102      | Hello  | en
4    | 102      | Hallo  | de 

我正在寻找的输出是比较上面 2 个表并得到类似如下所示的结果:

输出

Name    | Desc_en  | Desc_de
---------------------------
Stefan  | Hello    | Hallo
Andreas | Hello    | Hallo

我尝试了以下 SQL 子查询,但没有运气。如果有任何查询可以获取与上述类似的信息,请告诉我。

Select * from Person_Tbl where PersonID in (Select PersonID from PersonDescription_Tbl)

最佳答案

joins 使用 conditional 聚合,而不是使用 in

select p.Name, max(case when pd.Lang = 'en' then pd.Dec end) as Desc_en,
               max(case when pd.Lang = 'de' then pd.Dec end) as Desc_de   
from Person_Tbl p
inner join PersonDescription_Tbl pd on pd.PersonId  = p.PersonId 
group by p.Name; 

关于用于合并表并产生结果的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49875108/

相关文章:

oracle - 将 800 万条记录从 Oracle 导出到 MongoDB

mysql - SQL 通过日期检查选择可用房间

具有多种连接可能性的连接更新 MySQL

oracle - 仅为 SQL*Plus 设置 NLS_LANG

sql - Oracle中如何统计两个表的出现次数?

java - 当我从 Oracle DB 读取并将检索到的数字存储在字符串中时,为什么值存在差异。

sql - 在 MS-SQL 中更改表时, View 中的列会移位

mysql - 我如何在MYSQL中选择两周前?

sql - 如何指定不会被转换为 SQL 命令查询参数的常量值 NHibernate 标准

sql - 如何在 Oracle 中查询 CLOB 列