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

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

0 голосов
/ 29 января 2011

У меня есть 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 ]

1 голос
/ 29 января 2011

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

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 голосов
/ 29 января 2011

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

0 голосов
/ 29 января 2011

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

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
0 голосов
/ 29 января 2011

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

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.

...