Php MySQL连接:字段列表中的未知列

Php MySQL连接:字段列表中的未知列,php,mysql,sql,Php,Mysql,Sql,如何进行简单的MySQL连接 我有两张表,看起来像这样: companies id | name | type_id types id | type Array ( [1] => Array ( [id] => 1 [name] => business name [type] => type name ) ) SELECT c.id, c.name, t.type FROM types

如何进行简单的MySQL连接

我有两张表,看起来像这样:

companies
   id | name | type_id 

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

)
SELECT c.id, c.name, t.type
FROM types t LEFT JOIN
     companies c
     ON c.type_id = t.id;
现在我要做的就是得到一个数组,它看起来像这样:

companies
   id | name | type_id 

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

)
SELECT c.id, c.name, t.type
FROM types t LEFT JOIN
     companies c
     ON c.type_id = t.id;
我在mysql中尝试过:

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

FROM `companies`

RIGHT JOIN `types` ON  `companies.type_id` = `types.id`
但我得到了这个错误:

#1054-字段列表中的未知列“companys.id”

我有正确的语法吗?

试试这个

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

FROM `companies`

JOIN `types` ON  where `companies.type_id` = `types.id`
试试这个

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

FROM `companies`

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

问题是您转义列的方式,如下所示,该列将整个字符串作为列名,从而导致错误

`companies.id`
它应该在下面,这意味着您需要分别转义表名和列名

`companies`.`id`

问题是您转义列的方式,如下所示,该列将整个字符串作为列名,从而导致错误

`companies.id`
它应该在下面,这意味着您需要分别转义表名和列名

`companies`.`id`

您已经在限定的列名周围加上了回勾。因此,MySQL正在寻找一个名为“companys.id”的列名(名称中有一个句点),而不是“companys”中的“id”列

我建议您这样编写查询:

companies
   id | name | type_id 

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

)
SELECT c.id, c.name, t.type
FROM types t LEFT JOIN
     companies c
     ON c.type_id = t.id;
您的查询(列名固定)将保留
类型中的所有行,即使没有匹配的公司。上述情况也是如此。如果您真的想要所有公司,那么将其作为
左联接中的第一个表。如果类型始终匹配,则使用
内部联接

注:

  • 我不知道为什么要使用外部联接。但是,
    LEFT JOIN
    RIGHT JOIN
    更可取,因为语义更简单:将所有内容保留在第一个表中,其余部分保留匹配列
  • 表别名使查询更易于读取和写入
  • 不需要转义列名或表名。写和读都更简单

您已经在限定的列名周围加上了回勾。因此,MySQL正在寻找一个名为“companys.id”的列名(名称中有一个句点),而不是“companys”中的“id”列

我建议您这样编写查询:

companies
   id | name | type_id 

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

)
SELECT c.id, c.name, t.type
FROM types t LEFT JOIN
     companies c
     ON c.type_id = t.id;
您的查询(列名固定)将保留
类型中的所有行,即使没有匹配的公司。上述情况也是如此。如果您真的想要所有公司,那么将其作为
左联接中的第一个表。如果类型始终匹配,则使用
内部联接

注:

  • 我不知道为什么要使用外部联接。但是,
    LEFT JOIN
    RIGHT JOIN
    更可取,因为语义更简单:将所有内容保留在第一个表中,其余部分保留匹配列
  • 表别名使查询更易于读取和写入
  • 不需要转义列名或表名。写和读都更简单