我只是想通了這的。這可能是一個不好的做法,但在這種情況下,爲我工作。
我是懶惰的人誰不希望別名或帶有表前綴寫出每一列的名字之一。
你可以使用從特定表中選擇所有列在你的select語句中。
當你有重複的列名時,mysql會從第一個到最後一個覆蓋。來自第一個重複列名的數據將在它再次遇到該列名時被覆蓋。所以最後一次獲勝的重複列名稱。
如果我加入3個表,每個表都包含一個重複的列名,那麼select語句中表的順序將決定我爲重複列獲取的數據。
實施例:
SELECT table1.* , table2.* , table3.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
在上面的例子中,dup
我得到的值將是從table3
。
如果我想要dup
成爲table1
的值,該怎麼辦?
然後,我需要這樣做:
SELECT table3.* , table2.* , table1.* FROM table1 LEFT JOIN table2 ON table1.dup = table2.dup LEFT JOIN table3 ON table2.dup = table3.dup;
現在,table1
在後面,所以dup
值將會從表1的值。
我得到了我想要的價值dup
,而不必寫出每一個怪異的列,我仍然得到所有的列工作。好極了!
我知道dup
的值應該在所有3個表中都是相同的,但是如果table3
沒有匹配值dup
?然後dup
在第一個例子中將是空白的,那將是一個無賴。
來源
2009-11-14 02:11:53
Eab
這個答案作出了答案http://stackoverflow.com/questions/9233387/sql-should-i-use-a-join爲我工作,謝謝! – AVProgrammer 2012-02-10 22:24:42
這種方法的主要缺點是與SELECT *不同,查詢與表結構緊密耦合。也就是說,無論何時在模式中添加/刪除/重命名列,都必須相應地更改查詢。 – 2014-06-12 16:11:06
@RonInbar。 `SELECT *`是大系統中的維護噩夢。你建議添加一個列很簡單,如果使用`SELECT *`則不需要對SQL進行任何更改,但是在這裏指出的別名問題中情況並非如此。如果新領域很大,它也可能會帶來不必要的性能影響。它也可以打破期望一定數量或多個字段的客戶端控制。我可以繼續,但是當你瞭解它對可維護性和性能的影響時,`SELECT *`的好處就會很快消失。 – 2014-10-28 23:51:10