[英]Mysql join with one to many relations
索賠
c_id claim id
1 201
2 202
3 203
4 204
claim_status
cs_id claim_id status
1 201 created
2 202 created
3 202 submitted
4 203 submitted
5 204 created
如果創建並提交了索賠(如claim_id 202),那么如果我搜索“創建”條件,該索賠將不會顯示。 這是我的主要要求。 我需要如下所示的結果如果我使用status ='created'搜索,則需要獲取以下記錄
c_id claim_id cs_id claim_id status
1 201 1 201 created
4 204 5 204 created
如果我以status ='submitted'搜索,則需要獲取以下記錄
c_id claim_id cs_id claim_id status
2 202 3 202 submitted
3 203 4 203 submitted
但是我無法通過以下查詢獲得結果。 我是stackoverflow的新手。 因此,如果我在明確的帖子中寫錯了,請原諒我。
SQL:
SELECT * from claims c
INNER JOIN claim_status cs
ON c.claim_id = cs.claim_id
WHERE cs.status='created'
GROUP BY cs.claim_id
對於“創建”:
SELECT * from claims c
INNER JOIN claim_status cs
ON c.claim_id = cs.claim_id
WHERE cs.status='created'
對於“已提交”:
SELECT * from claims c
INNER JOIN claim_status cs
ON c.claim_id = cs.claim_id
WHERE cs.status='submitted'
要獲取已創建但未提交的聲明,請嘗試以下操作:
SELECT * from claims c
INNER JOIN claim_status cs
ON c.claim_id = cs.claim_id
WHERE cs.status='created'
AND NOT EXISTS (
SELECT 1
FROM claim_status cs2
WHERE cs2.claim_id = cs.claim_id
AND cs2.status='submitted'
)
這些是您的實際桌子嗎? 為什么要在除索賠之外的另一張表上處理索賠狀態? 您應該在“聲明”上有一個“狀態”列,然后完成。 您可以有另一個表來進行版本控制(如果要獲取聲明的較早狀態)並保存更改,時間戳等,但是對於當前狀態,最好將其放在同一表中
我知道這不是您要問的答案,但我認為最好有以下內容:
SELECT * FROM claims WHERE status = 'created'
要么
SELECT * FROM claims WHERE status = 'submitted'
它更快,更干凈,更好,所有東西(?)
另外,為了使它們更快,status應該是一個整數列,並且“ created”應該有一個關聯的數字,以便您可以
SELECT * FROM claims WHERE status = <value that means created>
對於已提交狀態或任何其他狀態相同
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.