我有一个与两个不同表相关的数据库表,例如:
=== inventory ===
+------------+-----------+
| code | total |
+------------+-----------+
| el_pr_25 | 45 |
| el_pr_11 | 33 |
| mob_tp_x93 | 23 |
| mob_tp_t55 | 33 |
| el_pr_x73 | 25 |
| mob_tp_25 | 22 |
+------------+-----------+
= electricity =
+-----+-------+
| id | name |
+-----+-------+
| 25 | test1 |
| 11 | test2 |
| x73 | test3 |
+-----+-------+
== mobile ==
+-----+----------+
| id | name |
+-----+----------+
| x93 | test 66 |
| t55 | test 222 |
| 25 | test 323 |
+-----+----------+
我要选择的主表是inventory表,inventory表通过 code
列,对于电能表有一个 el_pr_
前缀后跟 id
电力表和移动表的前缀是 mob_tp_
是前缀,我想从电力和移动表中选择名称列为的库存表,例如结果如下:
SELECT code,total, ... as name FROM inventory;
=== inventory ===
+------------+-----------+----------+
| code | total | name |
+------------+-----------+----------+
| el_pr_25 | 45 | test1 |
| el_pr_11 | 33 | test2 |
| mob_tp_x93 | 23 | test 66 |
| mob_tp_t55 | 33 | test 22 |
| el_pr_x73 | 25 | test3 |
| mob_tp_25 | 22 | test 323 |
+------------+-----------+----------+
3条答案
按热度按时间rjzwgtxy1#
你可以用
inner join
与union [all]
作为:rextester演示
brgchamk2#
我们可以尝试以下联接查询:
演示
上面的查询使用
COALESCE
为每个项目选择正确名称的技巧,它假定给定的项目只与electricity
或者mobile
table。但是,您的数据库设计并不理想。最好只有一个表包含移动和电气(以及其他)项目的元数据。此外,您的表应该有适当的联接列,这些列不需要复杂的子字符串或regex操作来匹配。我建议如下:
mqkwyuun3#
我建议将您的数据模型更改为单独的列,并使用两个列形成的唯一约束。
并将名称的来源合并到一个表中
然后
这只是一个粗略的轮廓!