我正在研究 MYSQL 查询设计,在我看来,这是相当困难的。我对SQL没有经验,所以我发现它真的很难。重点是:
我有一个“ordertable”表,它存储一些代码的顺序(AA、BB、CC ..)。在另一个表“AllTables”中,我存储与代码关联的表的名称(AA -> tableA)。最后,'tableA'表存储了不同单元(unit1,unit2...)的一些数据。
案例 1。
ordertable:代码顺序如下:
+----------------+------+
| split_position | code |
+----------------+------+
| 1 | AA |
| 2 | BB |
| 3 | CC |
| 4 | DD |
+----------------+------+
案例 2。
ordertable 代码顺序如下:
+-------+------+------+------+------+
| 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”+数字的内容,则关联表始终相同:“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。
最佳答案
这是一个有点陡峭的学习曲线,但基本上你必须声明一个游标和循环 在订单表中的每一行上选择数据,然后使用动态 SQL 将结果合并在一起。
检查这个sqlFiddle
要按分割位置 ASC 按最终结果排序,只需在执行之前将 ORDER BY split_position ASC
添加到 sql 变量,如下所示 sqlFiddle
关于mysql - 涉及多表的SQL查询设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22493606/