2014-10-16 47 views
0

我有以下的SQL查詢,並且需要弄清楚「簽名」數據實際上是從哪裏讀取的。這不是來自'索賠'表,並且似乎不是來自'questionnaire_answers'表。我相信這將是一個布爾值,如果這有幫助的話。在此查詢中讀取的簽名值在哪裏?

我很熟練掌握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 
"; 

謝謝!

+1

簽名是一個表(請參閱'左外部連接簽名')。 – 2014-10-16 10:49:48

+0

就這樣。我在構成系統數據庫的200多張表中錯過了它。介意發佈這個答案,以便我可以接受? – JakeSteam 2014-10-16 10:51:13

+1

有時賺點很容易:-) – 2014-10-16 10:52:14

回答

1

簽名是一個表(請參閱您的查詢中的LEFT OUTER JOIN signatures)。

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 

左關鍵字意味着左表中的行被保留;因此,將考慮表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

希望幫助!