2013-08-01 3 views
0

Google 소프트웨어에 대한 문제 추적 시스템이 있습니다.조인, 빼기, 하위 쿼리를 사용하여 SQL 문 작성하는 방법

문제 테이블 : 에 대한 다음

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

그 결과 세트의 각 문제 어제 내 상사가 나에게 2992의 ID와이 특정 사람에 의해 제출 된 문제 테이블의 모든 문제를 찾는 작업을했다

issue_subscribers 테이블 :

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

나는 사람이 가입했다 찾기 위해 다른 테이블에서 지켜 볼 수밖에 없었습니다 나는 다른 사용자를 대표하는이 ID 번호 (3247, 4748, 7430, 8429)를 가지고 있었고, 구독하지 않았다면 그 번호를 구독자로 추가해야했습니다. 이는 단순히 issue_subscribers 테이블에 새 행을 추가하는 것을 의미합니다.

이것은 내 머리 위로 방법이었습니다. 필자는 순수 SQL로 이해하기보다는 Java JDBC 프로그램에서 3 가지 다른 쿼리를 사용하여이 작업을 수행했습니다. 하지만 이제는 어떻게 할 수 있는지 궁금합니다. 이것은 전문적인 SQL 사용자를위한 간단한 절차입니까? 이 작업을 수행 할 단일 쿼리를 작성할 수 있습니까? 어떻게 완료 될까요?

+0

일부 샘플 데이터를 입력하십시오. –

+0

가능한 모든 구독자가 포함 된 테이블이 있습니까? –

+0

'issue_subscribers' 테이블에서'primary key' 또는'foreign key'입니까? –

답변

0

치죠 :

  • subscriber_id 가능한 모든 subscribers을 잡고 일부 테이블에 foreign key입니다.

    이 경우
    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) 
    
    ); 
    

    당신이 그것을 사용해야합니다 :

  • 는 당신은

당신은 SQL 쿼리를 다음 쓸 수 문제 2992 가입자 3247, 4748, 7430 및 8429.이 작업을 수행 할 필요가 다른 이슈와 구독자의 경우 id를 매개 변수로 변경하고 in 조건의 subscriber_ids을 다른 방법으로 지정해야합니다 (어쩌면 어떤 종류의 하위 선택).

관련 문제