主表
姓名 | 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。
如何编写查询,以便第一个表中的每一行都由第二个表中的结果进行补充?
可以这样做吗?
图片方便理解↓
您想要实现的目标需要一些代码或存储过程。为了获得最接近的结果,这里有一些可能性:
方法一:连接两个表的结果
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;
方法 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;
请注意,我使用
MySql
来测试此 SQL
。您可能需要对您的 DBMS
工具进行一些更改。