Php MySQL连接:字段列表中的未知列
如何进行简单的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
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
更可取,因为语义更简单:将所有内容保留在第一个表中,其余部分保留匹配列
- 表别名使查询更易于读取和写入
- 不需要转义列名或表名。写和读都更简单