我有以下SQL查询,需要弄清楚"签名"实际上正在读取数据。它不是来自'声称'表,似乎不是来自问卷调查表'表。我相信它会是一个布尔值,如果这有帮助的话。
我对SQL非常熟练,但这些联接让我有些困惑。
(有一些PHP,但它与问题无关)。
$SQL="SELECT surveyor, COUNT(signed_total) AS 'total', SUM(signed_total) AS 'signed_total' FROM (
SELECT DISTINCT claims.claim_id, CONCAT(surveyors.user_first_name, CONCAT(' ', surveyors.user_surname)) AS 'surveyor', CASE WHEN signatures.claim_id IS NOT NULL THEN 1 ELSE 0 END AS 'signed_total' FROM claims
INNER JOIN users surveyors ON claims.surveyor_id = surveyors.user_id
LEFT OUTER JOIN signatures ON claims.claim_id = signatures.claim_id
INNER JOIN questionnaire_answers ON questionnaire_answers.claim_id = claims.claim_id
WHERE (claims.claim_type <> ".$conn->qstr(TYPE_DESKTOP).")
AND (claims.claim_type <> ".$conn->qstr(TYPE_AUDIT).")
AND (claims.claim_cancelled_id <= 0)
AND (claims.date_completed BETWEEN '".UK2USDate($start_date)." 00:00:00' AND '".UK2USDate($end_date)." 23:59:59')
) AS tmp
GROUP BY surveyor
ORDER BY surveyor ASC
";
谢谢!
答案 0 :(得分:1)
签名是一个表格(请参阅查询中的LEFT OUTER JOIN signatures
)。
答案 1 :(得分:1)
如FROM
条款所述:
FROM claims
INNER JOIN users surveyors ON claims.surveyor_id = surveyors.user_id
LEFT OUTER JOIN signatures ON claims.claim_id = signatures.claim_id
LEFT关键字表示保留左表的行;因此,claims
表中的所有行都被考虑,并且NULL
标记被添加为来自连接的非保留端的属性的占位符,这里是signatures
表。
所以CASE WHEN signatures.claim_id IS NOT NULL THEN 1 ELSE 0 END AS 'signed_total'
基本上检查如果这两个表之间的匹配基于claim_id
,那么signed_total
列的值应为1,否则为0。
希望有所帮助!!