1

両方の添付タグを持つ応募者をデータベースから抽出する SQL ステートメントが必要です。以下のステートメントは、添付タグとして 7 または 8 のいずれかを持つ申請者が必要な場合にうまく機能しますが、これらのタグの両方を持つ申請者が必要です。

select distinct(a.id) from applicant a
join applicantdeployment ad on a.id = ad.applicantid
join ApplicantAttachment at on a.id = at.applicantid
where a.applicanttype = 'TCN/LN' and ad.groundlocation in (4,8,14) and ad.deploymentstatus =1
and ad.trainingdeploymentstatus = 6 and at.tag in (7,8)

たとえば、以下のセットから、ID 7332、7451、および 7449 を表示したいだけです。

IDタグ
7328 8
7328 8
7332 8
7332 7
7337 7
7449 8
7449 7
7451 8
7453 7
7451 7

ありがとう!

4

6 に答える 6

7

個別ではなく、以下を行う必要があります。

GROUP BY a.id HAVING COUNT(a.id) = 2  
于 2012-04-23T18:05:27.583 に答える
2

両方のタグが存在することを確認するために、ApplicationAttachment テーブルに 2 回参加できます。そうすれば、DISTINCT と GROUP BY の必要がなくなります。

SELECT a.id
FROM applicant a
JOIN applicantdeployment ad ON a.id = ad.applicantid
JOIN ApplicantAttachment at7 ON a.id = at7.applicantid AND at7.tag = 7
JOIN ApplicantAttachment at8 ON a.id = at8.applicantid AND at8.tag = 8
WHERE a.applicanttype = 'TCN/LN' 
AND ad.groundlocation IN (4,8,14)
AND ad.deploymentstatus = 1
AND ad.trainingdeploymentstatus = 6
于 2012-04-23T18:16:55.923 に答える
1

IN リスト項目を #Tags というテーブルに入れると、これが機能し、タグの数が変わってもクエリを書き直す必要はありません。

select distinct(#Temp.ID)
from #Temp
where not exists (
  select * from #Tags
  where not exists (
    select * from #Temp as TempCopy
    where TempCopy.Tag = #Tags.Tag
    and TempCopy.ID = #Temp.ID
  )
)  

英語では、必要なタグが欠落していない ID が選択されます。

于 2012-04-23T19:00:40.857 に答える
1

サンプル データでは、7451 も選択されるべきではありませんか? クエリに合わせて以下のコードを変更する必要がありますが、次のことを試してください。

CREATE TABLE #Temp
(
    ID INT,
    Tag INT
)

INSERT INTO #Temp
(
    ID,
    Tag
)
SELECT 7328, 8 UNION
SELECT 7332, 8  UNION
SELECT 7332, 7  UNION
SELECT 7337, 7  UNION
SELECT 7449, 8  UNION
SELECT 7449, 7  UNION
SELECT 7451, 8  UNION
SELECT 7453, 7  UNION
SELECT 7451, 7

select distinct(ad.id) from #Temp ad
join #Temp at on ad.id = at.id
AND ad.Tag != at.Tag
where at.tag in (7,8)
AND ad.Tag IN (7, 8)
于 2012-04-23T18:09:46.667 に答える
0

試す:

select distinct(a.id)
from applicant a
join applicantdeployment ad on a.id = ad.applicantid
join (select applicantid from applicantattachment at1
join applicantattachment at2 on at1.applicantid=at.applicantid
where at1.tag=7 and at2.tag=8) at
on a.id = at.applicantid
where a.applicanttype = 'TCN/LN'
and ad.groundlocation in (4,8,14)
and ad.deploymentstatus =1
and ad.trainingdeploymentstatus = 6

申請者アタッチメント テーブルをそれ自体に結合して、関連する申請者 ID のみを取得します。

于 2012-04-23T18:13:27.197 に答える
-2
select distinct(a.id) from applicant a
join applicantdeployment ad on a.id = ad.applicantid
join ApplicantAttachment at on a.id = at.applicantid
where a.applicanttype = 'TCN/LN' and ad.groundlocation in (4,8,14) and ad.deploymentstatus =1
and ad.trainingdeploymentstatus = 6 and at.tag in (7,8) and a.id IN (7332,7449);
于 2012-04-23T18:06:43.337 に答える