2017-07-16 74 views
1

如何做簡單的MySQL連接?MySQL連接:字段列表中的未知列

我有2個表看起來像這樣:

companies 
    id | name | type_id 

types 
    id | type 

現在我想要做的就是數組,它看起來是這樣的:

Array 
(
[1] => Array 
    (
     [id] => 1 
     [name] => business name 
     [type] => type name 
    ) 

) 

我已經在mysql中嘗試這樣的:

SELECT 
`companies.id`,`companies.name`,`types.type` 

FROM `companies` 

RIGHT JOIN `types` ON `companies.type_id` = `types.id` 

,但我得到這個錯誤:

#1054 - Unknown column 'companies.id' in 'field list'

我有正確的語法嗎?

回答

0

試試這個

SELECT 
`companies.id`,`companies.name`,`types.type` 

FROM `companies` 

JOIN `types` ON where `companies.type_id` = `types.id` 
4

問題是你逃避列像下面這走的是整個字符串作爲列名

`companies.id` 

它更應該是通過以下方式,因此錯誤,手段您需要分開轉義表名稱和列名稱

`companies`.`id` 
1

您hav e在合格的專欄名稱周圍加上引號。因此,MySQL正在尋找名爲「companies.id」的列名(名稱中包含句點),而不是「公司」中的「id」列。

我建議寫這樣的查詢:

SELECT c.id, c.name, t.type 
FROM types t LEFT JOIN 
    companies c 
    ON c.type_id = t.id; 

您的查詢(固定列名)將保持types所有行,即使沒有匹配的公司。上述做同樣的事情。如果你真的想要所有的公司,那麼把它作爲LEFT JOIN的第一張表。如果類型總是匹配,則使用INNER JOIN

注:

  • 我不知道爲什麼你使用的是外部聯接。但是,LEFT JOIN優於RIGHT JOIN,因爲語義更簡單:將所有內容保留在第一個表中,並將其餘的匹配列保留。
  • 表別名使查詢更易於閱讀和書寫。
  • 沒有必要轉義列或表名稱。更簡單的寫和讀。
相關問題