SQL连接问题
我有两张桌子SQL连接问题,sql,mysql,mysql-error-1054,Sql,Mysql,Mysql Error 1054,我有两张桌子 tblparents ---------- parentid husbandid wifeid tblnode ------- nodeid personid parentid 我想要的是一个SQL语句,它获取parentid、hurst/wifeid以及parentid相等的tblnode中的行数 代码是我写的 SELECT t.parentid, t.spouseid, t.active, c.count FROM (SELECT parentid, wifeid
tblparents
----------
parentid
husbandid
wifeid
tblnode
-------
nodeid
personid
parentid
我想要的是一个SQL语句,它获取parentid、hurst/wifeid以及parentid相等的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;
它在“where子句”中给出了一个错误1054-未知列“t.parentid”
有什么办法解决吗
非常感谢,试试这个:
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.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.husbandid, t.wifeid, COUNT(*)
LEFT JOIN tblnode n
ON n.parentid = t.parentid
GROUP BY t.parentid. t.husbandid, t.wifeid
编辑:这将返回最小计数1。出现语法错误。试试这个:
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
我认为在final语句中没有识别表别名t。您需要为unioned语句返回的set分配一个别名,并在select count*语句中引用该别名 这起作用了,现在又出现了另一个问题。如果count为0,则不会将其显示为行。即使计数为0,我也希望它显示该行。这非常有效,谢谢Cybernate选择t.parentid,t.wifeid-spoutseId,t.active,COUNTc.personid-CNT从tblparents t LEFT在t.parentid=c.parentid上加入tblnodes c,其中t.husbandid=1组BY t.parentid,t.wifeid