簡體   English   中英

涉及多個表的SQL查詢設計

[英]SQL Query design involving multiple tables

我認為我正在努力設計一個非常困難的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。

訂購的代碼順序如下:

+-------+------+------+------+------+
| 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”,其中,“ id”是代碼“ var37”的編號-> id = 37。

變量

+-----+------------+------+--------+
| id  | name       | time | active |
+-----+------------+------+--------+
| 15  | Pedro      |    5 |      1 |
| 17  | Maria      |    4 |      1 |
+-----+------------+------+--------+

表信息:

AllTables

+------+------------+
| code | name       |
+------+------------+
| AA   | tableA     |
| BB   | tableB     |
| CC   | tableC     |
| DD   | tableD     |
+------+------------+

TABLEA

+-------+------+------+--------+
| id    | name | time | active |
+-------+------+------+--------+
| unit1 | Mark |   11 |      1 |
| unit2 | Jame |   20 |      0 |
+-------+------+------+--------+

tableB的

+-------+------+------+--------+
| 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   |
+----------------+------+-------+-------+--------+

如果在tableC或tableD中不存在id(unit1),則應顯示“ split_position”和“ code”相關聯,但在“ active”字段中應顯示0。

這是一條陡峭的學習曲線,但是基本上,您必須聲明一個游標並在訂單表的每一行上循環,然后選擇數據,然后使用動態SQL將結果統一在一起。

檢查這個sqlFiddle

ORDER BY split_position ASC拆分位置ASC的最終結果排序,只需在執行此sqlFiddle之類的操作之前將ORDER BY split_position ASC添加到sql變量

要解決您的問題,您將需要以下內容:

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM