2017-03-03 9 views
1

私は3つのテーブルからデータにアクセスするクエリを持っている:テーブルは次のようになり特定の行が特定の条件を満たすクエリ内のすべての行を選択するにはどうすればよいですか?

SELECT fg.factGroupName, mc.CI, mt.Config 
        FROM MetricTypes mt 
        INNER JOIN MetricCollection mc ON mt.TypeId = mc.MetricType 
        INNER JOIN factGroup fg ON fg.factGroupId = mc.Factgroup 
        WHERE mt.ToolName = 2 AND mt.TypeName = 'inputs' AND mt.Deploy = 'Y' AND mc.Deploy = 'Y'; 

:どのように

|-------------|--------------|--------------| 
|factGroupName|  CI  | Config  | 
|-------------|--------------|--------------| 
| test_servers| alpha  | foo  | 
|-------------|--------------|--------------| 

factGroup      
|-------------|--------------| 
|factGroupId |factGroupName | 
|-------------|--------------| 
|  20  | test_servers | 
|  21  | prod_servers | 
|-------------|--------------| 

MetricTypes 
|-------------|--------------|--------------|------------|-----------| 
|TypeId  |TypeName  |ToolName  |Config  |Deploy  | 
|-------------|--------------|--------------|------------|-----------| 
|  10  | inputs  |  2  | foo  | Y  | 
|  11  | inputs  |  2  | bar  |   | 
|  12  | outputs  |  4  | giggle  |   | 
|  13  | inbetween |  6  | biz  |   | 
|-------------|--------------|--------------|------------|-----------| 

MetricCollection 
|-------------|--------------|--------------|------------|-----------| 
|MetricId  |Factgroup  |MetricType |CI   |Deploy  | 
|-------------|--------------|--------------|------------|-----------| 
| 1  |  20  |  10  | alpha  | Y  | 
| 2  |  20  |  11  | beta  |   | 
| 3  |  20  |  12  | gamma  |   | 
| 4  |  21  |  13  | theta  |   | 
|-------------|--------------|--------------|------------|-----------| 

照会の出力は次のようになりますすべてのCIConfigのフィールドを特定のに反映させるためにクエリを調整しますか、DeployフィールドにYフラグを持つものだけでなく、明確にするために

|-------------|--------------|--------------| 
|factGroupName|  CI  | Config  | 
|-------------|--------------|--------------| 
| test_servers| alpha  | foo  | 
| test_servers| beta  | bar  | 
|-------------|--------------|--------------| 

::他の言葉で、私は私の出力は次のようになりしたいのですが私は2つの展開の分野で「Y」のフラグが存在するかどうかを確認するための場所で条件を維持したいですこのクエリに関連付けられたスクリプトは、そのフラグをトリガとして追加の作業を実行するためです。

+0

何? – Mureinik

+0

このクエリが存在するスクリプトは、追加作業を実行するためのトリガとして "Y"フラグを使用します。 "Y"が存在しない場合、スクリプトは次のスケジュールされた繰り返しまでスリープ状態になります。 –

+0

私は分かりません。 'Deploy'のすべての値に対して結果が必要な場合は、' WHERE'節で「Y」レコードをフィルタリングすることはできません。あなたのスクリプトが 'Deploy'の値を知る必要があれば、それを' SELECT'節に含めます。 – Jerrad

答えて

2

INNER JOINDeploy = 'Y'が問題であるようです。

表の例:

create table #factgroup 
(
factgroupid int, 
factgroupname varchar(20) 
) 

create table #metrictypes 
(
typeid int, 
typename varchar(10), 
toolname int, 
config varchar(10), 
deploy varchar(1) 
) 

create table #metriccollection 
(
metricid int, 
factgroup int, 
metrictype int, 
ci varchar(10), 
deploy varchar(1) 
) 

insert into #factgroup values (20, 'test_servers') 
insert into #metrictypes values (10, 'inputs', 2, 'foo', 'Y') 
insert into #metrictypes (typeid, typename, toolname, config) values (11, 'inputs', 2, 'bar') 
insert into #metriccollection values (1, 20, 10, 'alpha', 'Y') 
insert into #metriccollection (metricid, factgroup, metrictype, ci) values (2, 20, 11, 'beta') 

(削除ハッシュタグで)これを試してください:あなたは、ちょうど `deploy`フィールド上の条件を削除した場合

SELECT fg.factGroupName, mc.CI, mt.Config 

FROM #MetricTypes mt 
INNER JOIN #MetricCollection mc ON mt.TypeId = mc.MetricType 
INNER JOIN #factGroup fg ON fg.factGroupId = mc.Factgroup 

WHERE mt.ToolName = 2 AND mt.TypeName = 'inputs' 

and mt.toolname in (
         select distinct mt.ToolName 
         from #metrictypes mt 
         where mt.deploy = 'y' 
        ) 

and mc.factgroup in (
         select distinct mc.factgroup 
         from #metriccollection mc 
         where mc.deploy = 'y' 
        ) 
+0

これは完璧に働いた、あなたの援助に感謝! –

関連する問題