SQL - 连接两个表的次数与第一个表中的匹配次数相同

问题描述 投票:0回答:1

主表

姓名 W H D
主要项目1 100 500 300
主要项目2 100 600 300
主要项目3 200 500 300
主要项目 4 100 500 300
主要项目5 100 600 300
主要项目 6 200 500 300

副表

姓名 W H D
次要项目1 100 500 300
次要项目2 100 600 300
次要项目3 200 500 300
次要项目4 100 500 300
次要项目5 100 600 300
次要项目6 200 500 300

结果

姓名 W H D
主要项目1 100 500 300
次要项目1 100 500 300
次要项目4 100 500 300
主要项目 4 100 500 300
次要项目1 100 500 300
次要项目4 100 500 300

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

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

可以这样做吗?

图片方便理解↓

彩色图像

sql
1个回答
0
投票

您想要实现的目标需要一些代码或存储过程。为了获得最接近的结果,这里有一些可能性:

方法一:连接两个表的结果

SELECT pm.name as primary_name, pm.w, pm.h, pm.d, sec.name as secondary_name 
FROM `primary_tbl` pm 
INNER JOIN `secondary_tbl` sec ON pm.w = sec.w AND pm.h=sec.h AND pm.d=sec.d 
WHERE pm.w = 100 AND pm.h=500 AND pm.d=300 ORDER BY primary_name; 

生成如下输出。 enter image description here

方法 2:根据主要名称对输出进行分组

SELECT pm.name as primary_name, pm.w, pm.h, pm.d, GROUP_CONCAT(sec.name) as secondary_names 
FROM `primary_tbl` pm 
INNER JOIN `secondary_tbl` sec ON pm.w = sec.w AND pm.h=sec.h AND pm.d=sec.d 
WHERE pm.w = 100 AND pm.h=500 AND pm.d=300 
GROUP BY primary_name; 

它将生成如下输出。 enter image description here

请注意,我使用

MySql
来测试此
SQL
。您可能需要对您的
DBMS
工具进行一些更改。

© www.soinside.com 2019 - 2024. All rights reserved.