2012-05-17 86 views
1

仍尝试习惯编写查询,并且遇到问题。涉及多个连接的子查询

Select count(region) 
where (regionTable.A=1) in 
(
select jxn.id, count(jxn.id) as counts, regionTable.A 
from jxn inner join 
       V on jxn.id = V.id inner join 
       regionTable on v.regionID = regionTable.regionID 
group by jxn.id, regionTable.A 
) 

内部查询给出了一个ID号在一列中,的时候,他们出现在表中的量,然后一点属性,如果他们是在区域A的外部查询工作,但我得到的错误是incorrect syntax near the keyword IN。内部查询的,我想了许多有多少人是在区域A

+0

你能描述你想要的查询返回什么? –

+0

内部查询给出了几千个ID的列表,ID在表中的次数,以及它们是否在区域A中。有些是,(1),一些不是(0)。我希望我刚刚提到的查询的一个子集只返回居住在区域A中的人员。我相信我现在已经向后查询了我的查询。 – wootscootinboogie

回答

0

你得到,因为这一行的错误:

where (regionTable.A=1)

你不能在where in指定条件条款,只应列名

+0

当我得到错误:多部分标识符regionTable.A无法绑定。 – wootscootinboogie

+1

是的,您需要指定您在第一个查询中选择的内容。现在你从空中选择。 –

+0

Facepalm。我想我倒退了。我想要的是大选择查询(其中regionA = 1)的一个子集。在这种情况下,我现在作为外部查询需要是内部的,正确的? – wootscootinboogie

1

您必须在查询中指定表名前地方

Select count(region) 
    from table 
    where (regionTable.A=1) in 

而你必须选择其中之一。

where regionTable.A = 1 

where regionTable.A in (..) 
0

像这样的东西可能是你想要什么:

SELECT COUNT(*) 
FROM 
    (
     select jxn.id, count(jxn.id) as counts, regionTable.A 
     from 
      jxn inner join 
      V on jxn.id = V.id inner join 
      regionTable on v.regionID = regionTable.regionID 
     group by jxn.id, regionTable.A 
    ) sq 
WHERE sq.a = 1 
1

您的查询有几个语法错误。根据您的意见,我认为没有必要为一个子查询,并希望此:

select jxn.id, count(jxn.id) as counts, regionTable.A 
from jxn inner join 
       V on jxn.id = V.id inner join 
       regionTable on v.regionID = regionTable.regionID 
where regionTable.A = 1 
group by jxn.id, regionTable.A 

可以进一步简化为:

select jxn.id, count(jxn.id) as counts 
    , 1 as A        --- you can even omit this line 
from jxn inner join 
       V on jxn.id = V.id inner join 
       regionTable on v.regionID = regionTable.regionID 
where regionTable.A = 1 
group by jxn.id 
+0

这是我在尝试使用子查询之前所做的。我试图练习使用子查询:) – wootscootinboogie