Проблема 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(*).