2011-01-28 108 views
0

我有2個表格。SQL加入問題

tblparents 
---------- 
parentid 
husbandid 
wifeid 

tblnode 
------- 
nodeid 
personid 
parentid 

我要的是一個SQL語句得到的parentid,丈夫/ wifeid和中行tblnode伯爵那裏的parentid的相等。在 'where子句' 未知列 't.parentid' -

我寫的代碼

SELECT t.parentid, t.spouseid, t.active, c.count FROM  
(SELECT parentid, wifeid spouseid from tblparents WHERE husbandid=1 
UNION 
SELECT parentid, husbandid spouseid from tblparents WHERE wifeid=1) t 
INNER JOIN 
(SELECT COUNT(*) count FROM tblnodes WHERE tblnodes.parentid=t.parentid) c; 

它給出了一個錯誤#1054。

任何想法如何解決?

多謝,

回答

0

出現語法錯誤。試試這個:

SELECT t.parentid, t.spouseid, t.active, c.count FROM  
(SELECT parentid, wifeid spouseid from tblparents WHERE husbandid=1 
UNION 
SELECT parentid, husbandid spouseid from tblparents WHERE wifeid=1) t 
INNER JOIN 
(SELECT parentid, COUNT(*) count 
FROM tblnodes GROUP BY parentid) c 
ON c.parentid=t.parentid) c ; 

但是,下面的查詢將有更好的表現:

SELECT t.parentid, t.wifeid spouseid, t.active, COUNT(t.parentid) CNT 
FROM tblparents t LEFT JOIN tblnode c 
    ON t.parentid = c.parentid 
GROUP BY t.parentid. t.wifeid, t.active 
1

試試這個:

SELECT t.parentid, t.spouseid, t.active, COALESCE(c.count, 0) AS count 
FROM (
    SELECT parentid, wifeid spouseid 
    FROM tblparents 
    WHERE husbandid = 1 

    UNION 

    SELECT parentid, husbandid spouseid 
    FROM tblparents 
    WHERE wifeid = 1 
) t 
LEFT JOIN (
    SELECT parentid, COUNT(*) count 
    FROM tblnodes 
    GROUP BY parentid 
) c 
    ON c.parentid = t.parentid 
+0

工作,現在出現了另一個問題。如果count爲0,它不會將其顯示爲一行。即使計數爲0,我也希望它顯示該行。 – MeCe 2011-01-28 21:56:34

+0

@MeCe然後使用LEFT JOIN。 – 2011-01-28 22:07:52

0

如果我正確理解你的問題:

SELECT t.parentid, t.husbandid, t.wifeid, COUNT(*) 
LEFT JOIN tblnode n 
    ON n.parentid = t.parentid 
GROUP BY t.parentid. t.husbandid, t.wifeid 

編輯:這將返回的1最小計數雖然。

0

我想表的別名「T」是不是在最後陳述被認可。您需要爲聯合語句返回的集合指定一個別名,並在select count(*)語句中引用該別名。