我正在尝试在两个表中的“Selected”列之间进行CROSS JOIN,
例如:表1(a,b,c) - 表2(a,b,d)
我想从每个表中选择a
和b
,然后加入它们,但我一直收到此错误:
Every derived table must have its own alias
我知道这是因为我需要命名任何派生表,但我仍然无法确定问题是什么以及如何在线搜索后修复它。这是查询:
SELECT (x.targetNumber, x.name, x.lat, x.lng)
FROM ((SELECT (u.name, u.targetNumber, u.password)
FROM Users AS u WHERE 'target' = u.type)
CROSS JOIN
(SELECT (l.targetNumber, l.password, l.lat, l.lng) FROM Location AS l)
WHERE (u.targetNumber = l.targetNumber AND u.password = l.password )) AS x;
答案 0 :(得分:2)
到目前为止,您的查询似乎应该是这样的:
select u.targetnumber, u.name, l.lat, l.lng
from users u
join location l on l.targetNumber = u.targetNumber and l.password = u.password
where u.type = 'target';
只是你想要应用一些技巧来强制DBMS遵循你认为最好的执行计划。这样做会使您的查询完全无法读取并引入错误。
如您所见,没有交叉连接。您根本不想要获得两个数据集的所有可能组合 - 这就是交叉连接。
无论如何,这不是SQL的工作原理。你要编写直截了当的查询告诉DBMS 要做什么。 DBMS然后决定如何来做它。
答案 1 :(得分:1)
简短的回答是将FROM Location AS l)
之后的右括号移到as
的正前方,并从子查询的选择列表中删除别名:
...(SELECT targetNumber, password, lat, lng FROM Location) AS l...
稍微长一点的答案:我甚至不理解你为什么在from子句中有子查询。你可以简单地加入这两个表。