MySQL Full Join的實現,mysqljoin

來源:互聯網
上載者:User

MySQL Full Join的實現,mysqljoin

MySQL Full Join的實現 因為MySQL不支援FULL JOIN,下面是替代方法left join + union(可去除重複資料)+ right joinselect * from A left join B on A.id = B.id (where 條件)unionselect * from A right join B on A.id = B.id (where條件); 

mysql實現full join

Oracle 、DB2、SQL Server、PostgreSQL 支援 Full JOIN
但是 MySQL 是不支援的。
可以通過
LEFT JOIN + UNION + RIGHT JOIN 的方式 來實現。

下面是 測試表與測試資料
-- 學生表CREATE TABLE student ( SNO INT, SNAME VARCHAR(10), ICNO INT);-- 食堂IC卡表CREATE TABLE IC ( ICNO INT, ICNAME VARCHAR(10), ICMoney INT);INSERT INTO student VALUES(1, '張三', 1 );INSERT INTO student VALUES(2, '李四', 2 );INSERT INTO student VALUES(3, '王五', NULL);INSERT INTO IC VALUES(1, '張三', 500 );INSERT INTO IC VALUES(2, '李四', 250 );INSERT INTO IC VALUES(3, '趙老師', 600);

下面是 SQL Server 使用 full join 的結果
SELECT student.SNO, student.SNAME, IC.ICNAME, IC.ICMoneyFROM student FULL JOIN IC ON (student.ICNO = IC.ICNO);goSNO SNAME ICNAME ICMoney----------- ---------- ---------- ----------- 1 張三 張三 500 2 李四 李四 250 3 王五 NULL NULL NULL NULL 趙老師 600(4 行受影響)

下面是 MySQL 不支援 的輸出結果:
mysql> SELECT -> student.SNO, -> student.SNAME, -> IC.ICNAME, -> IC.ICMoney -> FROM -> student -> FULL JOIN IC -> ON (student.ICNO = IC.ICNO);ERROR 1054 (42S22): Unknown column 'student.SNO' in 'field list'

下面是 MySQL 的 LEFT JOIN + UNION + RIGHT JOIN 的方式。
mysql> SELECT -> student.SNO, -> student.SNAME, -> IC.ICNAME, -> IC.ICMoney -> FRO......餘下全文>>
 
mysql full join的問題

可以 A Left JOIN B UNION B Left JOIN A
也就是
SELECT ... FROM A LEFT JOIN B ON (關聯條件)
UNION
SELECT ... FROM B LEFT JOIN A ON (關聯條件)

注意:
這裡的原理,是因為 UNION 操作, 會合并掉重複的。
前面的
A LEFT JOIN B , 包含了 A與B 都有的, 與 A 有 B 沒有的。
後面的
B LEFT JOIN A, 包含了 A與B 都有的, 與 B 有 A 沒有的。

UNION 處理以後,最後結果就是包含
A與B 都有的, 與 A 有 B 沒有的。與 B 有 A 沒有的。

但是, 如果你 A LEFT JOIN B 查詢的時候, 查詢本身就包含 重複記錄的話, 那麼這種 UNION 的方式恐怕沒法使用了。
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.