我有4張表 -
Tab: d
Name | ID
----------
A | 1
B | 2
C | 3
標簽:p
Name | ID
----------
AX | 1
B | 2
X | 3
Y | 4
Z | 5
標簽:s
Name | ID
----------
A | 1
BL | 2
V | 3
M | 4
標簽:a
Name | ID
----------
K | 1
J | 2
H | 3
N | 4
現在我正在使用MySQL,今天我發現MySQL不支持FULL連接。因此,我正在使用所有4個表的左連接,然后使用 "union "和右連接來合并所有4個表的記錄。 我使用的查詢是這樣的-
(select d.Name, p.Name, s.Name, a.Name from doc d
leftjoin
教授p
on d.id = p.id
leftjoin
唱s
on d.id = s.id
leftjoin
行為a
on d.id = a.id)
union
(select d.Name, p.Name, s.Name, a.Name from doc d
right join
教授p
on d.id = p.id
右 join
唱s
on d.id = s.id
右 join
行為a
on d.id = a.id)
但是這并沒有給出預期的輸出。它給出了類似于-
的東西D | P | S | A
---------------------------------
A | AX | A | K
B | B | BL | J
C | X | V | H
NULL | NULL | NULL N
實際輸出應該是-
。D | P | S | A
---------------------------------
A | AX | A | K
B | B | BL | J
C | X | V | H
NULL | Y | M | N
NULL | Z | NULL | NULL
請幫助我找出我所缺少的東西! 也請幫助我得到結果......
uj5u.com熱心網友回復:
你在這里真正想要的行為是一個完整的外層連接,但MySQL并不直接支持(而且變通的方法相當難看)。 我可以建議的一個方法是維護一個包含所有ID值的第五個表,這些值是你在結果集中所期望的。 請考慮:
SELECT c.ID, d.Name, p.Name, s.Name, a.Name
FROM
(SELECT 1 AS ID UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL
SELECT 4 UNION ALL SELECT 5)c
LEFT JOIN d ON d.ID = c.ID
LEFT JOIN p ON p.ID = c.ID
LEFT JOIN s ON s.ID = c.ID
LEFT JOIN a ON a.ID = c.ID
ORDER BY c.ID。
uj5u.com熱心網友回復:
假設你使用的是MySQL v8,你也許可以這樣做:
WITH RECURSIVE cte as (
SELECT 1 AS rn, MAX(cnt) AS mxcnt
FROM(cnt)
( SELECT COUNT(ID) cnt FROM doc UNION
SELECT COUNT(ID) FROM Prof UNION
SELECT COUNT(ID) FROM Sing UNION
SELECT COUNT(ID) FROM act ) v UNION ALL
SELECT rn 1, mxcnt FROM cte WHERE rn 1 < = mxcnt)
SELECT c.rn, d.Name, p.Name, s.Name, a.Name
FROM cte c
LEFT JOIN doc d ON d.ID = c.rn
LEFT JOIN prof p ON p.ID = c.rn
LEFT JOIN sing s ON s.ID = c.rn
LEFT JOIN act a ON a.ID = c.rn
ORDER BY c.rn。
使用WITH RECURSIVE根據所有相關表的最大計數結果生成編號序列,然后將其作為LEFT JOIN的參考。我同意Tim關于為所有的ID設定一個主表的意見。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/320146.html
標籤:
上一篇:計算SVG圓中的虛線進度路徑
