mysql - 涉及多表的SQL查询设计

标签 mysql sql join

我正在研究 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/

相关文章:

MySQL 重写 LIKE 查询中的字符串?

php - 将 2 个单独的数据库查询合并到一个 foreach 循环中或将查询合并为一个

Mysql查询Left Join条件问题

Mysql导出数据的问题

mysql - java.sql.SQLSyntaxErrorException : Unknown column . JPA 实体问题?

mysql - 为此应用程序连接到数据库的最佳方式

mysql - 多个 SELECT 语句在 MySQL 的存储过程中不起作用

MySQL:外键始终为0

MySql - 使用 COALESCE 检索正确的值?

mysql 在字段中查找/替换字符串