Php 显示其他表中不存在的值
我有一个叫fieldname creldesc的tbl_宗教 和具有这些字段的tbl_成员 我有这个查询来计算tbl_成员中所有现有的宗教,以及该宗教中男性和女性的数量,所以我做了这个查询:Php 显示其他表中不存在的值,php,mysql,sql,postgresql,Php,Mysql,Sql,Postgresql,我有一个叫fieldname creldesc的tbl_宗教 和具有这些字段的tbl_成员 我有这个查询来计算tbl_成员中所有现有的宗教,以及该宗教中男性和女性的数量,所以我做了这个查询: SELECT m.creldesc as type, COUNT(m.creldesc) as total, SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male, SUM(CASE WHEN m.cge
SELECT m.creldesc as type,
COUNT(m.creldesc) as total,
SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male,
SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female
FROM tbl_member as m, tbl_barangay as b, tbl_household as h
WHERE m.chholdnumber = h.chholdnumber and h.cbrgycode=b.cbrgycode and b.cbrgyname = 'AGAO'
and m.crelationdesc !='Brgy. Captain'
GROUP BY m.creldesc
ORDER BY tot DESC;
并获得以下输出:
我想要实现的是显示tbl_宗教中剩余的宗教,值为0。我做了一个左连接,但出现了一个错误。有人能帮我吗?我怎样才能做到
type total male female
Roman Catholic 7 4 3
Baptist 3 1 2
Islam 3 3 0
Iglesia ni Cristo 1 1 0
Free Methodist 1 1 0
Ang Dating Daan 1 0 1
Aglipay/Filipinsta 0 0 0
All the Gospel 0 0 0
Alpha Omega 0 0 0
and so on.............................
对所有表使用相同的联接方法,如下所示:
SELECT m.creldesc as type, COUNT(m.creldesc) as tot,
SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male,
SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female
FROM tbl_religion
LEFT JOIN tbl_member as m
ON tbl_religion.creldesc=m.creldesc
LEFT JOIN tbl_household as h
ON m.chholdnumber = h.chholdnumber
LEFT JOIN tbl_barangay as b
ON h.cbrgycode=b.cbrgycode
WHERE b.cbrgyname = 'AGAO' AND m.crelationdesc !='Brgy. Captain'
GROUP BY m.creldesc
ORDER BY tot DESC
您当前的查询方法是
。。。来自tbl_成员,tbl_barangay,tbl_家庭左加入tbl_宗教…
错误,将产生语法错误。您不能这样做:
从@TABLE1、@TABLE2、@TABLE3左键连接到@TABLE0上 一次只能从表中选择项。。。加入也一样
SELECT m.creldesc as type,
COUNT(m.creldesc) as tot,
SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male,
SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female
FROM tbl_member as m
LEFT JOIN tbl_religion z ON z.creldesc = m.creldesc
LEFT JOIN tbl_barangay h ON h.cbrgycode=b.cbrgycode
SO ON.... WITH JOINS
GROUP BY m.creldesc
更新工作代码:
SELECT m.creldesc as type, COUNT(m.creldesc) as tot, SUM(CASE WHEN m.cgender='Male' THEN 1 ELSE 0 END) as male,
SUM(CASE WHEN m.cgender='Female' THEN 1 ELSE 0 END) as female
FROM tbl_member as m
LEFT JOIN tbl_religion r ON r.creldesc = m.creldesc
LEFT JOIN tbl_barangay as b ON m.chholdnumber = b.cbrgycode
LEFT JOIN tbl_household as h ON h.cbrgycode = b.cbrgycode
WHERE b.cbrgyname = 'AGAO' and m.crelationdesc !='Brgy. Captain'
GROUP BY m.creldesc
ORDER BY tot DESC
以下是我所做的:
SELECT tbl_member.creldesc AS type,
COUNT(tbl_member.creldesc) AS total,
SUM(CASE WHEN tbl_member.cgender::text = 'Male'::text THEN 1 ELSE 0 END) AS male,
SUM(CASE WHEN tbl_member.cgender::text = 'Female'::text THEN 1 ELSE 0 END) AS female
FROM tbl_member
GROUP BY tbl_member.creldesc
UNION
SELECT b.creldesc AS type, 0 AS total, 0 AS male, 0 AS female
FROM tbl_religion b
WHERE NOT (b.creldesc::text IN
( SELECT DISTINCT tbl_member.creldesc FROM tbl_member))
GROUP BY b.creldesc;
这是它的输出:
仅此而已:)我使用了UNION而不是LEFT JOIN。选择m.creldesc作为类型,计数(m.creldesc)作为tot,SUM(当m.cgender='Male'时为CASE,然后1 ELSE 0 END)作为Male,SUM(当m.cgender='Female'时为CASE,然后1 ELSE 0 END)作为tbl_成员中的女性作为m,tbl_barangay作为b,左为tbl_家庭,加入tbl_宗教。creldesc=m.creldesc,其中m.chholdnumber=h.chholdnumber和h.cbrgycode=b.cbrgycode和b.cbrgyname='AGAO'和m.crelationdesc!='布莱基。船长组由m.creldesc签发tot命令DESC@Ullas:他只是说:“我做了一个左连接,但有一个错误。”你说使用左连接!!!并得到以下错误:对表“m”第7行的FROM子句条目的引用无效:在tbl_宗教上左连接tbl_宗教。creldesc=m。creldesc@SanRyu:我在他的代码中没有看到一个
左连接
。我想你在寻找一个左反连接,即左连接b打开(废话)其中b.id为null
但我如何获得上面的输出?我仍然无法实现我想要在上面输出的内容输出是相同的,仍然显示tbl_成员中存在的宗教,但我如何获得上面的输出?我对左连接有点困惑\n您完全按照上面的选择。。。但是当你加入表格时,你会做出这样的事情。。。选择m.creldesc作为类型,计数(m.creldesc)作为总数,求和(m.cgender='Male'时为1,否则0结束)作为男性,求和(m.cgender='Male'时为1,否则0结束)作为tbl_成员中的女性作为m左加入tbl_宗教r在r.creldesc=m.creldesc左加入tbl_barangay作为b在m.chholdnumber=b.cbrgycode左加入tbl_家庭作为h在h.cbrgycode=b.cbrgycode,其中b.cbrgyname='AGAO'和m.crelationdesc!='布莱基。船长小组m.creldesc tot DESCI的命令尝试了这一点,但我仍然得到了上面相同的输出仍然,我无法显示所有剩余的0值宗教@SanRyuThat is weard。。。加入是好的。。。我真的不明白你真正需要什么。。。您希望输出的内容是什么?更新后的代码仍然不起作用。我更改了左连接tbl_Househouse行,因为h.cbrgycode未连接到b.cbrgycode。tbl_Househouse上没有此类cbrgycode。但仍然是相同的输出@SanRyu