MySQL按id连接2个表A,B,其中A.id是B.id的子串

时间:2021-05-10 00:00:43

标签: mysql sql

我有 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 |
.............................................

3 个答案:

答案 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

相关问题