2011-11-23 176 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