簡體   English   中英

MySQL與一對多關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM