簡體   English   中英

MySQL自我完全外部聯接

[英]MySQL Self Full Outer Join

對於SQL和MySQL,我非常菜鳥。 我發現自連接是一種比較“ x”的方式,其中列A是相同的,例如

TAB1:

id    colA    x
-----------------
1     q1      0.1
1     q2      0.5
1     q3      0.7
2     q1      0.4
2     q2      0.9
2     q3      1.3
3     q1      0.2
3     q2      0.4
3     q3      0.1    

查詢:

select a.`colA`, a.`x`, b.`x`, c.`x`
from `tab1` as a
join `tab1` as b on a.`colA` = b.`colA`
join `tab1` as c on a.`colA` = c.`colA`
where a.`id` = 1 and b.`id` = 2 and c.`id` = 3

給我:

colA    x      x      x
q1      0.1    0.4    0.2
q2      0.5    0.9    0.4
q3      0.7    1.3    0.1

輝煌! 我還剛剛發現MySQL無法進行完全外部聯接,因此使用左,右或普通舊聯接將為我提供MINIMUM行,即,如果id缺少任何colA值,則結果將完全丟失它們,的確,如果我在上述任何ID中刪除q1和q2,則會得到一行。

q3      0.7    1.3    0.1

我已經看到了很多關於如何使用UNION / UNION ALL來模擬完全外部聯接的鏈接,我可以用科學怪人的身份進行鏈接,但是這些鏈接沒有給我帶來很好的比較表結果。 沒有一種更簡單的方法可以在SELF連接期間告訴查詢不忽略空值嗎? 我覺得這應該很容易,但是已經花了好幾個小時不停地抓着頭,用谷歌搜索了這么多答案,因為所有樹木,我都看不到木頭。

我會采取另一種方法; 避免完全外部聯接和自我聯接。

我認為您所追求的是在mySQL中模擬一個樞軸,該樞軸可以使用case語句和具有正確group by的聚合來完成。

演示: http : //rextester.com/NGFNJG9485

SELECT ColA
     , max(Case when ID = 1 then x end) as x1
     , max(Case when ID = 2 then x end) as x2
     , max(Case when ID = 3 then x end) as x3
FROM tab1
GROUP BY colA

給我們:

+----+------+-----+-----+-----+
|    | ColA | x1  | x2  | x3  |
+----+------+-----+-----+-----+
|  1 | q1   | 0,1 | 0,4 | 0,2 |
|  2 | q2   | 0,5 | 0,9 | 0,4 |
|  3 | q3   | 0,7 | 1,3 | 0,1 |
+----+------+-----+-----+-----+

或者,如果我們消除ID 3的數據點,則colA'q2':

+----+------+-----+-----+------+
|    | ColA | x1  | x2  |  x3  |
+----+------+-----+-----+------+
|  1 | q1   | 0,1 | 0,4 | 0,2  |
|  2 | q2   | 0,5 | 0,9 | NULL |
|  3 | q3   | 0,7 | 1,3 | 0,1  |
+----+------+-----+-----+------+

假設

  • 您將添加更多Q#而不是更多ID。 換句話說,我們不需要添加更多列,因為ID始終為1,2,3。 如果您確實需要更多列(Id),只需添加其他情況即可; 或使用頂級注釋第二個鏈接中提到的動態SQL。
  • ID和colA是唯一的 如果存在重復項,那么我們將需要討論x的值。 平均? 和? 什么? 否則,最小/最大/平均將全部起作用。

這將根據需要處理空值,因為只有空值的列的max為空,我們也可以coalesce()結果以顯示0(如果優先於空值)。 例如: coalesce(max(Case when ID = 3 then x end),0) as x3

給我們:

+----+------+-----+-----+-----+
|    | ColA | x1  | x2  | x3  |
+----+------+-----+-----+-----+
|  1 | q1   | 0,1 | 0,4 | 0,2 |
|  2 | q2   | 0,5 | 0,9 | 0,0 |
|  3 | q3   | 0,7 | 1,3 | 0,1 |
+----+------+-----+-----+-----+

暫無
暫無

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

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