Mysql 涉及多表的SQL查询设计
我正在进行MYSQL查询设计,在我看来,这相当困难。我对SQL没有经验,所以我觉得它很难。重点是: 我有一个“ordertable”表,它存储一些代码(AA、BB、CC..)的顺序。在另一个表中,“AllTables”存储与代码关联的表的名称(AA->tableA)。最后,“tableA”表存储不同单位(单位1、单位2…)的一些数据 案例1. 订单表:代码的顺序如下所示:Mysql 涉及多表的SQL查询设计,mysql,sql,join,Mysql,Sql,Join,我正在进行MYSQL查询设计,在我看来,这相当困难。我对SQL没有经验,所以我觉得它很难。重点是: 我有一个“ordertable”表,它存储一些代码(AA、BB、CC..)的顺序。在另一个表中,“AllTables”存储与代码关联的表的名称(AA->tableA)。最后,“tableA”表存储不同单位(单位1、单位2…)的一些数据 案例1. 订单表:代码的顺序如下所示: +----------------+------+ | split_position | code | +---------
+----------------+------+
| split_position | code |
+----------------+------+
| 1 | AA |
| 2 | BB |
| 3 | CC |
| 4 | DD |
+----------------+------+
+-------+------+------+------+------+
| id | pos1 | pos2 | pos3 | pos4 |
+-------+------+------+------+------+
| unit1 | AA | BB | DD | CC |
| unit2 | CC | BB | AA | DD |
| unit3 | BB | DD | CC | AA |
+-------+------+------+------+------+
案例2.
订单表代码的顺序如下所示:
+----------------+------+
| split_position | code |
+----------------+------+
| 1 | AA |
| 2 | BB |
| 3 | CC |
| 4 | DD |
+----------------+------+
+-------+------+------+------+------+
| id | pos1 | pos2 | pos3 | pos4 |
+-------+------+------+------+------+
| unit1 | AA | BB | DD | CC |
| unit2 | CC | BB | AA | DD |
| unit3 | BB | DD | CC | AA |
+-------+------+------+------+------+
在案例2中我们还可以找到类似“var15”的特殊代码:
+-------+------+-------+------+-------+
| id | pos1 | pos2 | pos3 | pos4 |
+-------+------+-------+------+-------+
| unit1 | AA | var15 | DD | var37 |
| unit2 | CC | BB | AA | DD |
+-------+------+-------+------+-------+
如果我们发现类似于“var”+number的内容,则关联的表总是相同的:“variable”,其中de“id”是代码“var37”->id=37的编号
变量
+-----+------------+------+--------+
| id | name | time | active |
+-----+------------+------+--------+
| 15 | Pedro | 5 | 1 |
| 17 | Maria | 4 | 1 |
+-----+------------+------+--------+
表格信息:
所有表格
+------+------------+
| code | name |
+------+------------+
| AA | tableA |
| BB | tableB |
| CC | tableC |
| DD | tableD |
+------+------------+
表a
+-------+------+------+--------+
| id | name | time | active |
+-------+------+------+--------+
| unit1 | Mark | 11 | 1 |
| unit2 | Jame | 20 | 0 |
+-------+------+------+--------+
表B
+-------+------+------+--------+
| id | name | time | active |
+-------+------+------+--------+
| unit1 | Mari | 44 | 1 |
| unit3 | nam2 | 57 | 1 |
+-------+------+------+--------+
给定一个id='unit1',我期待下一个:
结果
+----------------+------+-------+-------+--------+
| split_position | code | name | time | active |
+----------------+------+-------+-------+--------+
| 1 | AA | Mark | 11 | 1 |
| 2 | BB | Mari | 44 | 1 |
| 3 | CC | | | 0 |
| 4 | DD | | | 0 |
+----------------+------+-------+-------+--------+
如果id(unit1)不存在于tableC或tableD中,“split_position”和相关的“code”应该出现,但在“active”字段中应该出现一个0。要解决您的问题,您需要以下内容:
select split_position, code, name, time, active
from
(
select 'tableA' as tablename, id, [name], [time], active
from tableA
union all select 'tableB' as tablename, id, [name], [time], active
from tableB
) as tbls
inner join alltables atbls
on tbls.tablename=atbls.name
inner join ordertable ot
on atbls.code=ot.code
where tbls.id='unit1'
这是一个有点陡峭的学习曲线,但基本上你必须声明一个游标和循环 遍历ordertable中的每一行,选择数据,然后使用动态SQL将结果合并在一起 检查这个
要按拆分位置ASC按最终结果排序,只需将拆分位置ASC的排序添加到sql变量中,然后像这样执行它即可绝对奇妙!我印象深刻!它工作得非常好。是否有任何简单的方法可以通过拆分位置ASC排序最终结果?我做不到,谢谢你!正是我在寻找的。再次感谢!最后一个问题(我保证)。如果将“ordertable”作为案例2给出(请检查我的更新问题),那么很容易调整您所做的奇妙查询以获得相同的结果吗?如果您的ordertable与您所提到的案例2类似,那么您必须彻底更改存储过程,可能是类似这样的美妙事情!谢谢,我很抱歉。我不想在这里成为一个讨厌的人,Tin Tran,但我必须稍微修改一下你提出的这个令人敬畏的问题,没有你的帮助,我感到有点迷失方向。如你所见,我在问题中更新了案例2。你介意看一下这个,告诉我这是可行的还是真的很难?再次感谢:)