从此查询中读取的签名值在哪里?

时间:2014-10-16 10:43:22

标签: sql

我有以下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
";

谢谢!

2 个答案:

答案 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。

希望有所帮助!!