2011-11-23 162 views
0

问题需要帮助如下:SQL查询:在子查询

有2个相关的表(我提供了一些样本值使它简化):

Circuit 
-------- 
id name 
1  a 
2  b 
3  c 

Circuit_Dependent 
----------------- 
id depend_id 
1  2 
1  3 

表是相关的,第二个表告诉与电路ID的关系。被查询所需
现状为:
1)列出其具有circuit_dependency 输出所期望的电路名称:

name dependent_name 
a  b 
a  c 

2)列出电路名称和计数(无依赖关系的)
输出预期:

name count 
a  2 

感谢帮助。

+1

如果这是一个家庭作业,请添加相应的标记 – sll

+0

这是问的面试问题之一。 – user1062837

+0

我希望你在这里没有使用答案来面试 - 看起来很尴尬。 –

回答

1

首先查询可以是:

SELECT c1.`name`, c2.`name` 
FROM Circuit_Dependent cd INNER JOIN Circuit c1 
    ON cd.id = c1.id  
INNER JOIN Circuit c2 
    ON cd.depend_id = c2.id 

第二个查询可能是这一个:

SELECT c.`name`, COUNT(DISTINCT cd.depend_id) AS count 
FROM circuit c INNER JOIN Circuit_Dependent cd 
    ON c.id = cd.id 
GROUP BY c.id 
+0

我不认为你的第二个查询会执行,你不能引用select中不属于聚集的一列。 (即你选择了名字,但它不是你的组的一部分,也不是一个聚合函数) – CAbbott

+0

@CAbbott:你试过了吗?那么,它的作品:)无论如何,OP可以用'GROUP BY c.name'来改变它。谢谢:) – Marco

+0

因为OP没有指定数据库,所以我只是通过SQL Server。 :) – CAbbott