MySQL join:字段列表中的未知列

时间:2017-07-16 13:38:43

标签: php mysql sql

如何做简单的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 - “字段列表”中的未知列'companies.id'

我的语法是否正确?

3 个答案:

答案 0 :(得分:4)

问题是你如下所示转义列的方式,它将整个字符串作为列名称,因此错误

`companies.id`

它应该在下面,意味着您需要单独转义表名和列名

`companies`.`id`

答案 1 :(得分:1)

您已在合格的列名称周围添加了反引号。因此,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 JOINRIGHT JOIN更可取,因为语义更简单:保留第一个表中的所有内容以及其余表中的匹配列。
  • 表别名使查询更易于阅读和编写。
  • 无需转义列名或表名。更容易编写和阅读。

答案 2 :(得分:0)

试试这个

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

FROM `companies`

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