添加子查询别名结果:SQL命令不能正确地结束
当我运行此查询,它的工作原理:添加子查询别名结果:SQL命令不能正确地结束
select id1, count(*) from id_table
where id2 = 'X' and id1 in
(
select numA from num_table where numB = 'Y' and numC like '%Z%'
)
group by id1
order by count(*) desc;
然而,当我跑这一次,我得到的SQL命令无法正常结束错误。请注意,唯一的区别是我给了子查询alias'sq1'。
select id1, count(*) from id_table
where id2 = 'X' and id1 in
(
select numA from num_table where numB = 'Y' and numC like '%Z%'
) **sq1**
group by id1
order by count(*) desc;
我需要弄清楚这一点,因为我试图加入到子查询中,因此需要'on'子句的别名。
有人可以解释为什么添加子查询别名触发此错误?
正如我和其他人在评论中提到的问题是,你试图别名,而不是派生的表或列。
觉得你的代码是这样的:
是一样的话说:
WHERE id1 IN (1,2,3,4) sql
这看起来不正确,你会SQL中走样? id1 IN (1,2,3,4)
的结果基本上是boolean of true or false
它不是要在查询的另一部分中引用的对象。
如果您将查询作为联接进行编写,您实际上可以对该表进行别名化。
select
t.id1
,count(DISTINCT t.id1)
from
id_table t
INNER JOIN num_table sq1
ON t.id1 = sq1.numA
AND numB = 'Y'
and numC like '%Z%'
where t.id2 = 'X'
group by id1
order by count(DISTINCT t.id1) desc;
或者作为派生表
select
t.id1
,count(*)
from
id_table t
INNER JOIN (SELECT DISTINCT numA
FROM
num_table
WHERE
numB = 'Y'
and numC like '%Z%'
) sq1
ON t.id1 = sq1.numA
where t.id2 = 'X'
group by id1
order by count(*) desc;
如果id_table.id1是这些查询的唯一两个和一个要尝试你OP都会给你的ID,1作为答案... ...
Matt , 谢谢。这是非常有用的,特别是将它看作IN()子句。真的很感谢患者的回答。 –
@SethAKelley很高兴能够帮助,如果我的答案满足您的问题,如果您可以标记为答案会很好。它可以让其他人知道你的问题已经解决,并奖励声望点。谢谢。 http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Matt
您试图将别名列表而非派生表或列 – Matt
您的查询中没有连接子句 – Amit
您只能为派生表定义别名,而不能为子查询 –