2013-08-01 59 views
0

我們有一個針對我們軟件的問題跟蹤系統。昨天我的老闆給了我與2992的ID提交此某些人的問題表找到所有問題的任務:如何使用連接編寫SQL語句,設置減法,子查詢

問題表:

issue_id (int) 
submitter_id (int) 
...other fields

那麼對於在結果集的每一個問題我不得不看另一個表找到誰是訂閱了它:

issue_subscribers表:

issue_id (int) [primary key to issue table] 
subscriber_id (int) 
...other fields

我有這些代表其他用戶的身份證號碼(3247,4748,7430,8429),如果他們中的任何一個沒有訂閱,我不得不將他們添加爲問題的訂閱者。這意味着只需在issue_subscribers表中添加一個新行。

這是我的頭。我最終在一個Java JDBC程序中用3個不同的查詢來完成這個任務,而不是試圖用純SQL來解決這個問題。但現在我很好奇它是如何完成的。這是專業SQL人員的簡單程序嗎?是否可以寫一個單一的查詢來做到這一點?它將如何完成?

+0

請提供一些示例數據 –

+0

您是否有包含所有可能的'訂戶'的表? –

+0

在'issue_subscribers'表中,是主鍵還是外鍵? –

回答

0

假設:

  • subscriber_id是foreign key一些表持有所有可能subscribers
  • 你只需要與問題2992和用戶3247,4748,7430和8429.這樣做

你可以寫下面的SQL查詢:

Insert Into issue_subscribers 
(
    issue_id, 
    subscriber_id 
    -- and other fields if necessary 
) 
(
    Select 2992 issue_id, 
     subscriber_id 
     -- and other fields if necessary 
    From subscribers subs -- table that holds all possible subscribers 
    Where subscriber_id In (3247, 4748, 7430, 8429) 
    And Not Exists (Select 1 
         From issue_subscribers iss 
         Where issue_id = 2992 
         And iss.subscriber_id = subs.subscriber_id) 

); 

如果你需要使用它對於其他問題和訂閱者,您需要將ID更改爲參數,並以其他方式指定in條件的subscriber_ids(可能是某種子查詢)。

相關問題