我想写一个查询,它将连接2个表.将从表1中取出所有值,并加入表2.但是,它的查询列‘Language’也应该被填充.

在下面的示例中-ID 3的行数应该与表2中"Language"列中的不同语言数相同.所以在这里我们有E,F,但是当表2将填充更多语言时,来自表1的那些没有名字的ID应该与它们一起出现在查询结果中. 如何做到这一点?:)

表1:

ID
1
2
3

表2:

ID Name Language
1 a E
1 b F
2 c E
2 d F

结果查询:

ID Name Language
1 a E
1 b F
2 c E
2 d F
3 NULL E
3 NULL F

推荐答案

你可以CROSS JOIN种可用语言,然后得到一个ID的所有组合,最后你LEFT JOIN个名字

SELECT
t1.[ID],t2.[Name], t3.[Language] 
FROM table1 t1
  CROSS JOIN ( SELECT DISTINCT [Language] FROM table2) t3
LEFT JOIN table2 t2 ON t1.[ID] = t2.[ID] AND t2.[Language] = t3.[Language]
ORDEr BY t1.[ID],t2.[Name], t3.[Language]
ID Name Language
1 a E
1 b F
2 c E
2 d F
3 null E
3 null F

fiddle

Sql相关问答推荐

如何实现一个广泛的多级自连接PostgreSQL查询?

解析键-值对,根据值 Select ,并使用SQL创建新列

使用Mac日志(log)时间找出SQL中的好小时和坏小时

UPDATE查询中的乐观锁

正在编写查询.我需要将订阅的时间段分为第一个订阅中包含的另一个订阅之前和之后的时间段

将结果从一列转换为两行或更多

明细表中没有记录如何更新主表的值为0

从JSON值数组创建扁平数组Athena

如何根据 SQL 中的阈值标记一个集群中的所有值?

具有多个表 JOINS 的 STRING_AGG 的替代方法 (SQL Server 2016)

通过ID和数据找到每个不同的值

SQL 搜索 - 获取最大值日期的奇怪行为

没有调用子查询的嵌套 JOIN语法是什么?

计算 ID 满足条件的次数

如何使用SQL将患者平均分配给他们所在地区的doctor

使用日期和间隔作为键加入 Athena 上的表?

As400 (IBM i) SQL 表 QSYS2.SYSTABLES 上的元数据

条件意外地显着降低性能的地方

使用 json_agg 从 SQL 查询获取 [null] 响应

当我按 PK 分组时,该表中的所有列在每个组中都具有相同的值.那么为什么 SQL Server 需要对这些列进行聚合呢?