MySQL CROSS JOIN: Every Derived Table Must Have Its Own Alias

8 浏览
0 Comments

MySQL CROSS JOIN: Every Derived Table Must Have Its Own Alias

我正在尝试在两个表的“选定”列之间进行交叉连接,\n例如:表1(a,b,c) - 表2(a,b,d)。\n我想从每个表中选择a和b,然后将它们连接起来,但是我一直遇到这个错误:\n“每个派生表都必须有自己的别名”。\n我知道这是因为我需要给任何派生表命名,但即使在网上搜索之后,我仍然弄不清楚问题所在以及如何解决它。这是查询语句:\n从((从用户表中选择(u.name,u.targetNumber,u.password)WHERE \'target\' = u.type)\nCROSS JOIN\n从位置表中选择(l.targetNumber,l.password,l.lat,l.lng))AS x\nWHERE(u.targetNumber = l.targetNumber AND u.password = l.password);

0
0 Comments

问题的出现原因是在SQL语句中使用了子查询作为FROM子句的一部分,并且在子查询中没有给表指定别名。这导致了语法错误。

解决方法是将子查询的右括号移动到as的前面,并且从子查询的SELECT列表中移除表的别名。

具体做法是将FROM Location AS l)改为FROM (SELECT targetNumber, password, lat, lng FROM Location) AS l

使用子查询的原因可能是为了避免连接两个庞大的表,只选择需要的数据,以提高查询的速度。然而,实际上,SQL不会因为它作为连接的一部分而检索所有表的所有行。对于你尝试的查询和错误消息,无法对随后出现的语法错误做出评论。

MySQL的CROSS JOIN语句要求每个派生表都必须有自己的别名。如果在子查询中使用了FROM子句,并且没有给表指定别名,就会出现语法错误。解决方法是给子查询的表指定别名,并将右括号移动到as的前面。这样可以避免语法错误,并且可以根据实际需要选择需要的数据,以提高查询的速度。

0
0 Comments

问题的出现原因是查询语句中使用了错误的语法和逻辑,导致查询结果错误。解决方法是使用正确的语法和逻辑,以及避免使用不必要的操作。

在这个问题中,查询语句的目标是获取所有的组合,而不是仅仅连接两个表。然而,查询语句中使用了错误的语法和逻辑,导致结果不正确。正确的做法是使用正确的语法和逻辑,明确告诉数据库系统需要做什么,而不是试图强制数据库系统按照自己的计划执行操作。

根据问题的描述,通过更正语法和逻辑,问题得到了解决。然而,作者仍然决定使用'cross join'而不是'join',因为作者确实想要获取所有的组合,而不仅仅是连接两个表。

总结起来,这个问题的出现原因是错误的语法和逻辑,解决方法是使用正确的语法和逻辑,并避免不必要的操作。在编写查询语句时,应该明确告诉数据库系统需要做什么,而不是试图干预数据库系统的执行计划。

0