1

私はいくつかのテーブルを持っています:

  1. いくつかの診断センターのマスター データを含む "DCDetails" テーブル。
  2. 会社のマスターデータを含む「CompanyDetails」テーブル
  3. 調査(実施される医療検査のセットを意味する)を含む「調査」表

これらは私のマスターテーブルです。

また、いくつかのマッピング テーブルがあります。 1. 会社から診断センターへのマッピングを含む「CompanyDCMap」テーブル

次の 2 つの基準に基づいて、一連の DC をフィルタリングする必要があります。

  1. DC は「CompanyDCMap」に属し、
  2. (1)でフィルタリングされた DC のうち、「InvestigationDCMap」テーブルにも属します。

「CompanyDetails」テーブルと「Investigation」テーブルの主キーがある場合に、CompanyDCMap と InvestigationDCMap の両方にある DC を取得するように、このクエリを作成するにはどうすればよいですか。

2 つのセットを同時にフィルター処理するクエリが思い浮かびません。

親切に私を助けてください。

UPDATE スキーマ: CompanyDetails テーブル:

CompanyID(PRIMARY KEY), CompanyName(NVARCHAR(100))
   1                     Company1
   2                     Company2
   3                     Company3

調査表:

InvestigationID(Primary key) , InvestigationName(NVARCHAR(100))
   1                               HIV+ Blood Test
   2                               TMT
   3                               Urine Test

DCDetails テーブル:

DCID(PRIMARY KEY), DCName(NVARCHAR(100))
   1                 DC1
   2                 DC2
   3                 DC3

CompanyDCMap テーブル

   CompanyDCMapID(Primary key), CompanyID(Foreign key), DCId(Foreign Key)
          1                        1                       1
          2                        1                       2
          3                        2                       2
          4                        2                       3
          5                        3                       1
          6                        3                       3

調査DCMap表

  InvestigationDCMapID(Primary Key), InvestigationID(Foreign Key), DCId(Foreign Key)
          1                                1                           1
          2                                1                           3
          3                                2                           2
          4                                2                           3

CompanyID = 1 および InvestigationID = 2、SELECT DCId および DCName = を指定したクエリの予期される出力

     DCId(Int)                   DCName(NVARCHAR(100))
      2                          DC2
4

1 に答える 1

4
SELECT d.DCID, d.DCName
FROM dbo.DCDetails AS d
INNER JOIN dbo.CompanyDCMap AS c
ON d.DCID = c.DCId
INNER JOIN dbo.InvestigationDCMap AS i
ON i.DCId = d.DCID;

「個別の」値を取得するには、次を使用できます。

SELECT DISTINCT d.DCID, d.DCName
FROM dbo.DCDetails AS d
INNER JOIN dbo.CompanyDCMap AS c
ON d.DCID = c.DCId
INNER JOIN dbo.InvestigationDCMap AS i
ON i.DCId = d.DCID;

または...

SELECT d.DCID, d.DCName
FROM dbo.DCDetails AS d
INNER JOIN dbo.CompanyDCMap AS c
ON d.DCID = c.DCId
INNER JOIN dbo.InvestigationDCMap AS i
ON i.DCId = d.DCID
GROUP BY d.DCID, d.DCName;

さらに良いことに、他のテーブルとの関係は必要ないため、次のようになります。

SELECT d.DCID, d.DCName
FROM dbo.DCDetails AS d
WHERE EXISTS (SELECT 1 FROM dbo.CompanyDCMap WHERE DCId = d.DCID)
AND EXISTS (SELECT 1 FROM dbo.InvestigationDCMap WHERE DCId = d.DCID);

これははるかに効率的なクエリになりますが、他のテーブルの他の列が必要な場合は、結合バージョンに戻す必要があります。

于 2013-01-09T18:19:40.603 に答える