主表

Name W H D
Primary item 1 100 500 300
Primary item 2 100 600 300
Primary item 3 200 500 300
Primary item 4 100 500 300
Primary item 5 100 600 300
Primary item 6 200 500 300

辅助表

Name W H D
Secondary item 1 100 500 300
Secondary item 2 100 600 300
Secondary item 3 200 500 300
Secondary item 4 100 500 300
Secondary item 5 100 600 300
Secondary item 6 200 500 300

结果

Name W H D
Primary item 1 100 500 300
Secondary item 1 100 500 300
Secondary item 4 100 500 300
Primary item 4 100 500 300
Secondary item 1 100 500 300
Secondary item 4 100 500 300

W = 100 , H = 500 , D = 300 .

如何编写查询,以便第一个表的每一行都用第二个表的结果补充?

有可能这样做吗?

图片用于更好地理解#

color image

推荐答案

primary_data个行中 Select secondary_dataunion对,结果在whd列上具有primary_datasecondary_data的内部连接.

select name, w, h, d
from ( select
         *,
         name as prim_name,
         1 as is_prim
       from primary_data as p
       where exists( select *
                     from secondary_data as s
                     where s.w = p.w and s.h = p.h and s.d = p.d )
       union all
       select s.*, p.name, 0
       from primary_data as p
       join secondary_data as s
       on s.w = p.w and s.h = p.h and s.d = p.d ) as t
where w = 100 and h = 500 and d = 300
order by prim_name, is_prim desc, name;

db<>fiddle

Sql相关问答推荐

使用收件箱运行多个SQL Update字符串,但出现错误

创建每小时重置的序列号

将SEMI JOIN、ANTI JOIN转换为非连接SQL

替换条件中的单元格值

如何使用WSO2将空值传递给我的SQL Server存储过程?

使用WHERE子句进行筛选时,SQL SELECT查询返回总计数

查找表中特定值的上次更新日期

有没有办法在Postgres中存储带有时区的时间戳,而不将其转换为UTC

IF NOT EXISTS子查询的性能瓶颈

以一致的价值获得独特的价值

在SELECT中将日期格式转换为双周时段

比较SQL中以逗号分隔的字符串

如何使用Clickhouse的COUNT聚合返回所有列,但GROUP BY是这些列的子集

按二维数组的第一个元素排序

SQL Server 查询 WHERE LIKE

DbUp for sqlserver 在 dbo 授权下为非 dbo 用户创建架构

在 Oracle 21c 中透视文本值

SQL 函数 DIFFERENCE 返回有趣的分数

SQL - 只需要 GROUP BY SELECT 的一列

如果 SQL 中不存在数据,如何根据某个 ID 为所有日期添加前一行