Проблема SQL-соединения

У меня есть 2 таблицы.

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

tblnode
-------
nodeid
personid
parentid

То, что я хочу, это SQL-оператор, который получает parentid, мужа /ouseid и количество строк в tblnode, где парентиды равны.

Я написал код

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 - Неизвестный столбец "t.parentid" в "где предложение".

Есть идеи как решить?

Огромное спасибо,

4 ответа

Решение

Произошла синтаксическая ошибка. Попробуй это:

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

Попробуй это:

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

Если я правильно понимаю ваш вопрос:

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, хотя.

Я думаю, что псевдоним таблицы "t" не распознается в последнем утверждении. Вам необходимо назначить псевдоним для установки, возвращаемый объединенными операторами, и ссылаться на этот псевдоним в операторе select count(*).

Другие вопросы по тегам