簡體   English   中英

在左連接上為列名稱別名

[英]Alias a column name on a left join

假設我有兩個表,並且它們的主要標識符都使用名稱“id”。 如果我想使用這兩個表執行連接,我將如何為要與前一個表連接的表的id進行別名?

例如:

SELECT * FROM `sites_indexed` LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` WHERE `url` LIKE :url

現在,site_id應該與sites_indexed.id鏈接。 但是,表示individual_data行的實際idsites_indexed具有相同的標題

就個人而言,我喜歡只使用名稱id ,因為它保持一致。 然而,當編寫服務器端腳本時,它會讓事情變得混亂。

例如

$var = $result['id'];

鑒於前面提到的查詢,這不會混淆解釋器嗎?

無論如何,這是如何實現的?

您應該使用“SELECT *”選擇所有字段,而應明確命名所需的每個字段,並根據需要使用AS對其進行別名。 例如:

SELECT si.field1 as si_field1,
       si.field2 as si_field2,
       ind_data.field1 as ind_data_field1
  FROM sites_indexed as si
  LEFT JOIN individual_data as ind_data 
         ON si.id = ind_data.site_id 
 WHERE `url` LIKE :url

然后,您可以在結果集中引用別名。

這個線程很老,我發現因為我有同樣的問題。 現在我有了更好的解決方案。 Paul McNett和antun給出的答案強制您列出所有字段,但在某些情況下這是不可能的(要列出的字段太多),因此您可以保留*和別名僅包含您想要的字段(通常是具有相同字段的字段)名稱並將互相覆蓋)。

這是如何做 :

    SELECT *, t.myfield as myNewName 
FROM table t ... continue your query

您可以通過添加逗號來添加任意多個別名。

問題是你正在使用*通配符。 如果在查詢中明確列出列名,則可以為它們指定別名:

SELECT `sites_indexed`.`id` AS `sites_indexed_id`,
       `individual_data`.`id` AS `individual_data_id`
       FROM `sites_indexed` 
       LEFT JOIN `individual_data` ON `sites_indexed`.`id` = `individual_data`.`site_id` 
       WHERE `url` LIKE :url

然后你可以通過別名引用它們:

$ var = $ result ['sites_indexed_id']; $ var_b = $ result ['individual_data_id'];

使用此表達式,您將獲得具有列id (來自表sites_indexed )和id2 (來自表individual_data的id的別名)的結果

SELECT t1 . *, t2 . * FROM sites_indexed t1
LEFT JOIN (select id as id2, other_field1, other_field2 FROM individual_data) t2 ON t1.id = t2.site_id WHERE your_statement

暫無
暫無

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

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