2017-03-23 7 views
-1

nullを含むすべての値を選択しようとしていますが、このトピックについていくつかのスレッドがあることはわかっていますが、すべて機能していないか、実装方法がわかりません。とにかく、私はすべての色の最低価格を取得する必要があります。そして私が質問をしようとすると、今はそれがnullを除くすべての色の最低価格を取得しています。しかし、私はまた、色がヌルのときに最低価格を望んでいます。 これは私が今持っているクエリです:SQL nullを含むすべての値を選択する方法は?

SELECT p.* 
FROM plant p 
inner JOIN (SELECT Color, min(price) minPrice 
      from plant 
      group by color           
     ) b on p.price = b.minPrice and 
       p.color= b.color 
order by plantcode; 

それがnullを含むすべての値を選択するクエリを修正する方法は?結果では、あなたがのために0のを見つける:

SELECT p.* FROM plant p 
inner JOIN(SELECT Color, min(COALESCE(price,0)) minPrice 
      from plant group by color           
     ) b on COALESCE(p.price,0) = b.minPrice and 
       COALESCE(p.color,'NULL')= COALESCE(b.color,'NULL') order by plantcode; 

これだけで「速いショット」です:

+0

はそれがあなたのために働くかどうかを確認し、内部結合の代わりに参加します。 – Kevin

+1

いくつかのサンプルテーブルデータと期待される結果、およびフォーマットされたテキストを追加します。 – jarlh

+0

NVL機能を試しましたか? https://www.w3schools.com/sql/sql_isnull.asp – Tim

答えて

0

:あなたは左の外側を使用してみてください

SELECT p.* FROM plant p 
inner JOIN(SELECT Color, min(COALESCE(price,0)) minPrice 
      from plant group by color           
     ) b on COALESCE(p.price,0) = b.minPrice and 
       COALESCE(p.color,'NULL')= COALESCE(b.color,'NULL') order by plantcode; 
+0

ありがとう!これは動作します! – Alegou20

1

あなたはnullがそうでない場合は、発見されたような場合にゼロ値を代入しようとCOALESCE()を使用することができます列minPriceにはnulls、列にはpriceがあります。 COALESCE()関数はそれらを「等しい」にします。 cars10の答えのバージョン編集

+0

それは動作していません、まだヌルの色を表示していません – Alegou20

+0

両方の結合条件で合体を使用する必要があります。 p.colorとb.colorがnullの場合は、それらを結合できる 'NULL'のようなテキスト値に設定します。私はこの答えを編集しましたが、まだ表示されないかもしれません(ピアレビューを待っています)。 –

+0

@Jeremy:はい、ありがとう!私は単に 'カラー'ビジネスを見過ごした;-) – cars10m

関連する問題