Php 显示其他表中不存在的值

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

我有一个叫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.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