非常简单的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之类的东西是完美的列名时,这就很难了。无论如何,谢谢你的补充回答,我很感激有机会学习。