1

2 つのテーブルがあり、最初のテーブルからデータを選択しています。条件が満たされている場合(エイリアスタイプ= 2)、最初のテーブルのIDの2番目のテーブルのデータが存在する場合、2番目のテーブルから列を選択したい. 詳細を説明するデータは次のとおりです。

表1

id | Name         | Location  
---+--------------+---------  
34 |John Smith    |NewYork  
36 |Mike Smith    |London  
45 |Bob Smith     |Los Angeles  

表 2

id | Alias             | Alias type     
---+-------------------+-------  
36 |Warren Johnson     |1  
36 |William Williams   |2  

エイリアス タイプ = 2 の場合に必要な結果

id |Name               | Location   
---+-------------------+---------  
34 |John Smith         |NewYork  
36 |William Williams   |London  
45 |Bob Smith          |Los Angeles  

必要な結果を得るためのクエリの作成を手伝ってもらえますか? さらに説明する必要がある場合は教えてください。SQL Server データベースを使用しています。

4

3 に答える 3

4

left outer joinaを Table2 に使用するとCOALESCE、Alias と Name の結果は次のようになります。

SELECT Table1.ID, COALESCE(Table2.Alias, Table1.Name) AS Name, 
    Table1.Location
FROM Table1
LEFT OUTER JOIN Table2 ON Table1.ID = Table2.ID AND Table2.AliasType = 2

COALESCE指定された値から最初の null 以外の値を見つけることによって機能します。

于 2013-01-23T20:22:59.217 に答える
2

このようなものを試してみてください - あなたはただ使用する必要がありますCASE:

SELECT T1.Id, 
   CASE WHEN T2.Alias IS NOT NULL THEN T2.Alias ELSE T1.Name END as Name,
   t1.Location
FROM Table1 T1
   LEFT JOIN Table2 T2 ON T1.Id = T2.Id AND T2.AliasType = 2

これがSQL Fiddleです。

幸運を。

于 2013-01-23T20:22:40.833 に答える
2

COALESCE 関数を使用すると、テーブル 2 の名前が存在する場合はそれが使用され、それ以外の場合はテーブル 1 の名前が使用されるようにフォールバック式を使用できます。LEFT 外部結合は、行が存在する場合にのみテーブル 2 を結合し、レコードが結合されていない場合、t2.name は null になります。

SELECT t1.id, COALESCE(t2.name, t1.name), t1.location FROM [Table 1] as t1 LEFT JOIN [Table 2] as t2 on t1.id=t2.id and t2.[alias type]=2

于 2013-01-23T20:23:03.587 に答える