1. 程式人生 > 其它 >Mysql填坑筆記 | FROM後的子查詢與表連線

Mysql填坑筆記 | FROM後的子查詢與表連線

本文總結了一些在Mysql的FROM後使用子查詢和表連線時遇到的坑,並給出了相關例子。

  在Mysql查詢語句FROM的後面使用子查詢時坑實在太多了。為方便描述和演示,首先建立瞭如下資料表(命名為example),其中id為primary key:

  坑1.在From後,對每一個由子查詢產生的新表須指定別名(alias)。

  相關演示如下,對上述的example表執行如下操作。若對由子查詢產生的表不新增別名(程式碼1),則會報錯誤Error Code: 1248. Every derived table must have its own alias;新增別名後(程式碼2),則可正常執行。

/*程式碼1 報錯*/
select * from example, ( select * from example )
/*程式碼2 正常執行*/
select * from example, ( select * from example ) as t

  坑2.在From後,對兩個表進行連線,若兩個表中存在相同名稱的列,則在指定連線後的表中的列時需具體書寫:表名.列名

  對上述的example表執行如下操作,程式碼3會報錯Error Code: 1052. Column 'id' in field list is ambiguous;程式碼4可以正常執行。

/*程式碼3 報錯*/
select id
from example, (
    select * from example
) as t

/*程式碼4 正常執行*/
select t.id
from example, (
    select * from example
) as t

  坑3.在From後,對兩個表進行連線,若兩個表中存在相同名稱的列,亦可進行連線,不會產生衝突(如程式碼4)。

  無需對相同列名的列進行如下的重新命名(下列程式碼也可正常執行,但書寫比較麻煩):

/*程式碼5*/
select *
from example, (
    select id as id2, A as A2, B as B2 from example
) as t

  坑4.在From後可進行多表(大於兩個表)的連線。

  如下程式碼可正常執行:

/*程式碼6*/
select *
from example as a left join example as b on a.id = b.id left join example as c on b.id = c.id

執行後的結果如下圖:

  

目前就想到這些,後續如果有遇到其他的情況的話會繼續更新。

上述內容若有錯誤,歡迎大家批評指正。

歡迎大家在評論區進行討論和交流。

本文來自部落格園,作者:新的一年不出BUG,轉載請註明原文連結:https://www.cnblogs.com/buchubug/p/15868519.html