我有 2 个表,“节点”和“设备”
节点表具有节点 ID、名称和功能。每个节点都装满了设备,在设备表中给出。设备 ID 包含节点 ID + 设备名称文本。所以节点id是设备id的子串。我希望能够通过设备表中的节点 id 查询一个节点有哪些设备。
如何构建查询以:
“加入给定节点id的表,将节点longName列条目添加到包含节点id的设备表中的每件设备(在其设备id内)”
编辑:这不是一个重复的问题,因为它依赖于“LIKE”的使用,而其他链接的答案中没有这个问题
Node table
+--------------------------------------+------------+----------------+
| id | longName | memberFunction |
+--------------------------------------+------------+----------------+
| 15c6a1ef-ff1c-3486-bce9-8157906a2995 | North_Node | DGE |
| 182019b4-b2e7-307b-85c6-2a39001a54ff | South_Node | DGE |
| 1adf96c7-8e0d-35d9-9d00-1c0acf6c6f92 | East_Node | ROADM |
| 1d14064f-6bd9-3d11-862f-abc25612d88f | West_Node | ILA |
+--------------------------------------+------------+----------------+
Equipment table
+----------------------------------------------------+-------+------+
| id | shelf | slot |
+----------------------------------------------------+-------+------+
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21 | 21 | NULL |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1 | 21 | 1 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10 | 21 | 10 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10_2 | 21 | 10 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_11 | 21 | 11 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_13 | 21 | 13 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14 | 21 | 14 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14_2 | 21 | 14 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_15 | 21 | 15 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_16 | 21 | 16 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_1 | 21 | 17 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_2 | 21 | 17 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_3 | 21 | 17 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1_2 | 21 | 1 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_2 | 21 | 2 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_3 | 21 | 3 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_5 | 21 | 5 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_6 | 21 | 6 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_7 | 21 | 7 |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_9 | 21 | 9 |
........................
Desired output table
+----------------------------------------------------+-------+------+------------+
| id | shelf | slot | longName |
+----------------------------------------------------+-------+------+------------+
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21 | 21 | NULL | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1 | 21 | 1 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10 | 21 | 10 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10_2 | 21 | 10 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_11 | 21 | 11 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_13 | 21 | 13 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14 | 21 | 14 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14_2 | 21 | 14 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_15 | 21 | 15 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_16 | 21 | 16 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_1 | 21 | 17 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_2 | 21 | 17 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_3 | 21 | 17 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1_2 | 21 | 1 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_2 | 21 | 2 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_3 | 21 | 3 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_5 | 21 | 5 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_6 | 21 | 6 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_7 | 21 | 7 | North_Node |
| 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_9 | 21 | 9 | North_Node |
.............................................
答案 0 :(得分:1)
一种方法是:
select n.*, e.*
from nodes n join
equipment e
on n.id = substring_instr(e.id, ':', 1);
第二种方法是
select n.*, e.*
from nodes n join
equipment e
on e.id = concat(n.id, '::%');
答案 1 :(得分:1)
你可以这样做:
select
e.*,
n.longName
from Equipment e
join Node n on e.id like concat(n.id, '%')
答案 2 :(得分:1)
一个简单的连接就足够了
<块引用>CREATE TABLE Node (
`id` VARCHAR(36),
`longName` VARCHAR(10),
`memberFunction` VARCHAR(5)
);
INSERT INTO Node
(`id`, `longName`, `memberFunction`)
VALUES
('15c6a1ef-ff1c-3486-bce9-8157906a2995', 'North_Node', 'DGE'),
('182019b4-b2e7-307b-85c6-2a39001a54ff', 'South_Node', 'DGE'),
('1adf96c7-8e0d-35d9-9d00-1c0acf6c6f92', 'East_Node', 'ROADM'),
('1d14064f-6bd9-3d11-862f-abc25612d88f', 'West_Node', 'ILA');
<块引用>
CREATE TABLE Equipmen (
`id` VARCHAR(50),
`shelf` INTEGER,
`slot` VARCHAR(4)
);
INSERT INTO Equipmen
(`id`, `shelf`, `slot`)
VALUES
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21', '21', 'NULL'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1', '21', '1'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10', '21', '10'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10_2', '21', '10'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_11', '21', '11'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_13', '21', '13'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14', '21', '14'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14_2', '21', '14'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_15', '21', '15'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_16', '21', '16'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_1', '21', '17'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_2', '21', '17'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_3', '21', '17'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1_2', '21', '1'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_2', '21', '2'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_3', '21', '3'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_5', '21', '5'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_6', '21', '6'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_7', '21', '7'),
('15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_9', '21', '9');
<块引用>
SELECT e.*,n.`longName`
FROM Equipmen e INNER JOIN Node n ON n.id = LEFT(e.id,36)
id | shelf | slot | longName :------------------------------------------------- | ----: | :--- | :--------- 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21 | 21 | NULL | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1 | 21 | 1 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10 | 21 | 10 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_10_2 | 21 | 10 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_11 | 21 | 11 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_13 | 21 | 13 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14 | 21 | 14 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_14_2 | 21 | 14 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_15 | 21 | 15 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_16 | 21 | 16 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_1 | 21 | 17 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_2 | 21 | 17 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_17_3 | 21 | 17 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_1_2 | 21 | 1 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_2 | 21 | 2 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_3 | 21 | 3 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_5 | 21 | 5 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_6 | 21 | 6 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_7 | 21 | 7 | North_Node 15c6a1ef-ff1c-3486-bce9-8157906a2995::EQPT_21_9 | 21 | 9 | North_Node
db<>fiddle here