2

これを行う方法の考え方に関する一般的な回答を探しています...可能なパラメーターでいっぱいの列と可能な値でいっぱいの列を持つテーブルがあります。特定の種類のすべてのパラメーターを別のテーブルに結合して、それらの特定の行の詳細を説明したいのですが、そのテーブルを特定の値を含まない他のすべての行に結合したくありません。次のようになります。

Parameters  Values   Mammal
   a          1         
   b          3
   d         cat      Yes
   c          4
   d         dog      Yes
   e          3
   d         fish      No
   f          2

Case を使用していくつかの方法を試しましたが、テーブルが非常に奇妙になり、長さに応じてテーブルが結合されるという繰り返しがありました。助言がありますか?

2 番目のテーブルには 2 つの列があり、独自の animal 列で値の列に結合されています。パラメーター = "d"です。パラメータが他の値と等しい場合、まったく表示されません。どんな提案でも大歓迎です!(知る必要がある場合は、私は Cache SQL を使用しています。テクニックの一般的な説明が欲しいのですが、もっと役に立ちます。)

編集:申し訳ありませんが、ここでは2つの別々のテーブルになります:

      Table 1:                                   Table 2:

Parameters  Values                           Animal      Mammal
    a        1                                 cat         yes
    b        3                                 dog         yes
    d        cat                              snake        no
    c        4                                fish         no
    d        dog                               rat         yes
    e        3                               hamster       yes
    d        fish
    f        2
4

2 に答える 2

6

現在のクエリはINNER JOIN、両方のテーブルで一致するレコードのみを含む を使用しているようです。LEFT JOINからすべてのレコードを生成するを使用し、 でtable1一致するレコードを生成する必要がありますtable2。一致するものがない場合table1、欠落している側は null になります。

select t1.parameters,
  t1.value,
  case when t2.mammal is null then '' else t2.mammal end Mammal
from table1 t1
left join table2 t2
  on t1.value = t2.animal

デモで SQL Fiddle を参照してください

JOIN構文の学習に助けが必要な場合は、すばらしい記事があります。

SQL 結合の視覚的な説明

于 2012-09-28T10:11:23.217 に答える
1

2 つのオプション。

最初にサブクエリを使用します。

select [parameters], [values], 
    (select mammal from t2 where t2.animal = t1.[values]) as mammal
from t1

2 番目は、左結合を使用します。

select [parameters], [values], t2.mammal
from t1
left join t2 on t1.[values] = t2.animal

他の回答は左結合を使用しますが、他の回答によって提供される null 置換をスキップします。

これは、MS SQL Server (T-SQL) のみでテストされていることに注意してください。

于 2012-09-28T10:28:21.110 に答える