我在MySQL中有以下查询
SELECT *,(select lat from node where id=node_id)as lat,(select lng from node where id=node_id)as lng from tag,node WHERE 1 limit 5
但我收到此错误消息..
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
问题是什么?
答案 0 :(得分:2)
我认为你在寻找的是这个。此代码等同于“向我显示标记中的前5行以及相应列'lat'和'lng',其中节点中的node_id等于节点中的node_id”
SELECT tag.*, node.lat, node.lng
FROM tag JOIN node ON tag.node_id=node.node_id
LIMIT 1,5
答案 1 :(得分:2)
您可能想要:
WHERE
子句,它包含一个布尔表达式,或者根本不使用它。lat.id
,lat.node_id
?)或其他内容node
两次 - 在子查询中)通常 - 写一个更全面,更具体的查询,不会产生任何歧义,也不会有麻烦。
我想从标签表中检索数据 它有node_id列,而i 想要检索相应的 来自节点表的lat,lng列
SELECT
tag.*,
node.lat,
node.lng
FROM
tag
JOIN node ON tag.node_id=node.id
LIMIT 5
答案 2 :(得分:1)
尝试:
SELECT tag.*, node.*,
(select lat from node where id=node_id)as lat,
(select lng from node where id=node_id)as lng
from tag,node
WHERE 1 limit 5
然而,这将是非常低效的,因为它使用两个相关的子查询而没有JOIN条件。也许你可以解释一下你想要实现的目标,我们可以改进这个查询吗?
答案 3 :(得分:1)
好的,有很多糟糕的编码技术,我不知道从哪里开始。
首先,你的意思是交叉连接,因为这就是你所拥有的。在编写sql代码时使用隐式连接是一种非常糟糕的做法。 IT导致错误,维护起来更难。您不会编写在1992年被替换为更好的C#或Java代码吗?
选择*是一个非常糟糕的选择。始终明确定义所需的列。
你在WHERE 1中获得什么?这没有意义。
通常相关的子查询很糟糕。你为什么不只是做一个内连接,然后选择字段?