2017-07-16 73 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,因为语义更简单:将所有内容保留在第一个表中,并将其余的匹配列保留。
  • 表别名使查询更易于阅读和书写。
  • 没有必要转义列或表名称。更简单的写和读。
相关问题