Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
非常简单的MySQL内部连接失败_Mysql_Sql_Join - Fatal编程技术网

非常简单的MySQL内部连接失败

非常简单的MySQL内部连接失败,mysql,sql,join,Mysql,Sql,Join,以下是我的简单内部连接: SELECT paintings.*, locations.* FROM paintings INNER JOIN locations ON locations.work_type = 'paintings' AND locations.work_id = 'paintings.id' WHERE locations.location LIKE '%19th%' 它返回零结果。我希望它能在位置表中找到每一个匹配的绘画行,这是基于有一个共同的工作类型

以下是我的简单内部连接:

SELECT paintings.*, locations.*
 FROM paintings
 INNER JOIN locations
 ON locations.work_type = 'paintings' AND locations.work_id = 'paintings.id'     
 WHERE locations.location LIKE '%19th%' 
它返回零结果。我希望它能在位置表中找到每一个匹配的绘画行,这是基于有一个共同的工作类型和id

SELECT * FROM locations WHERE location LIKE '%19th%' AND work_type = 'paintings'
我得到1000多个结果

我做错了什么


谢谢

您需要更改此部分:

locations.work_id = 'paintings.id'
为此:

locations.work_id = paintings.id

您当前的查询要求locations.work\u id字段包含实际的literal值paints.id;您需要的是要求locations.work\u id字段包含与paints.id字段相同的值。

您需要更改此部分:

locations.work_id = 'paintings.id'
为此:

locations.work_id = paintings.id
您当前的查询要求locations.work\u id字段包含实际的literal值paints.id;您需要的是要求locations.work\u id字段包含与paints.id字段相同的值。

您的ON子句包含一个错误,即:

AND locations.work_id = 'paintings.id'
您使用的是单引号,这使其成为字符串文字。用反勾号替换它们,您应该会没事:

AND locations.work_id = `paintings`.`id`
ON子句包含一个错误,即:

AND locations.work_id = 'paintings.id'
您使用的是单引号,这使其成为字符串文字。用反勾号替换它们,您应该会没事:

AND locations.work_id = `paintings`.`id`
使用:

问题是paints.id周围的单引号-这使得SQL将其解释为字符串,而不是连接条件的列。MySQL支持连接语法,但不确保与另一个表存在关系——在这种情况下,它将生成笛卡尔乘积

其他:

p和loc是表别名,因此不必每次都键入整个名称。 backticks`由MySQL用于转义文本,在您使用的情况下。否则,它们是不必要的,我建议不要使用保留字。 连接条件的放置对于内部连接不重要,但是对于外部连接重要-请小心。 使用:

问题是paints.id周围的单引号-这使得SQL将其解释为字符串,而不是连接条件的列。MySQL支持连接语法,但不确保与另一个表存在关系——在这种情况下,它将生成笛卡尔乘积

其他:

p和loc是表别名,因此不必每次都键入整个名称。 backticks`由MySQL用于转义文本,在您使用的情况下。否则,它们是不必要的,我建议不要使用保留字。 连接条件的放置对于内部连接不重要,但是对于外部连接重要-请小心。
啊!!嗯。非常感谢。我希望我能感谢大家,但正如他们所说,这场比赛属于最快的选手。但非常感谢大家。多么愚蠢的错误。@user399696:不客气!虽然我认为这句话实际上是说,比赛不属于速度快的人。至少,传道书9:11是这么说的,我不熟悉任何其他相关的说法。啊!嗯。非常感谢。我希望我能感谢大家,但正如他们所说,这场比赛属于最快的选手。但非常感谢大家。多么愚蠢的错误。@user399696:不客气!虽然我认为这句话实际上是说,比赛不属于速度快的人。至少,传道书9:11是这么说的,我不熟悉任何其他相关的说法。啊!嗯。非常感谢。我希望我能给你所有的答案,但正如他们所说,比赛属于最快的。但是非常感谢。多么愚蠢的错误啊!嗯。非常感谢。我希望我能给你所有的答案,但正如他们所说,比赛属于最快的。但是非常感谢。多么愚蠢的错误啊,太酷了。我几乎从不使用别名,一般来说,它们让我感到困惑。这是一个关于回跳的好注释。我倾向于避免使用保留字,但当order之类的东西是完美的列名时,这就很难了。无论如何,谢谢你的补充回答,我很感谢有机会学习。啊,很酷。我几乎从不使用别名,一般来说,它们让我感到困惑。这是一个关于回跳的好注释。我倾向于避免使用保留字,但当order之类的东西是完美的列名时,这就很难了。无论如何,谢谢你的补充回答,我很感激有机会学习。