简体   繁体   中英

Conditional Inner Join using CASE

I wanted to count and sum all of bits column in my table if the sum of it is greater than 2 the isApprove column in my documents table will be 1.

SELECT document_id,
SUM(CASE WHEN isApprove = 1 THEN 1 ELSE 0 END) AS approveBy
FROM approvals_document

Output:

document_id | approveBy
     96          2

I wanted to join the related table for approvals_document which is documents using this.

SELECT document_id, D.isApprove,
SUM(CASE WHEN isApprove = 1 THEN 1 ELSE 0 END) AS approveBy
FROM approvals_document AD
INNER JOIN documents D ON D.id = AD.document_id

But it won't join the isApprove column. Which part am I missing? Any help would appreciated!

approvals_document column

id | document_id | isApprove

documents column

id | isApprove

Draft output:

document_id | approveBy | isApprove(documents table)

    96           2            0

Youre missing an equals in the join clause, in the ON, and you need to alias the case:

SELECT document_id, D.isApprove,
SUM(CASE WHEN AD.isApprove = 1 THEN 1 ELSE 0 END) AS approveBy
FROM approvals_document AD
INNER JOIN documents D ON D.id = AD.document_id

Try with the below query using LEFT JOIN AND GROUP BY .

SELECT d.id, 
    d.isApprove,
    SUM(CASE WHEN ad.document_id IS NULL THEN 0 ELSE 1 END) AS approveBy
FROM documents d
LEFT JOIN  approvals_document ad
  ON  ad.isApprove =1 and ad.document_id = d.id
GROUP BY d.id,d.isApprove

You are trying to list all documents and number of approvedBy:

try:

SELECT documents.id, 
    documents.isApprove,
    (select count(*) from approvals_document WHERE approvals_document.isApprove =1 and approvals_document.document_id = documents.id) as approveBy
FROM documents;

will give you

+------------+--------------------+--------------------------+
| documet.id | isapproved or not, | number of times approved |
+------------+--------------------+--------------------------+
|          1 |                  1 |                        2 |
+------------+--------------------+--------------------------+

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM