2017-03-23 65 views
-1

所以我試圖選擇包括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; 

如何修復它選擇的所有值,包括空的查詢?

+0

你應該嘗試使用左外連接,而不是內部聯接,看是否適合你。 – Kevin

+1

添加一些示例表格數據和預期結果 - 以及格式化文本。 – jarlh

+0

您是否嘗試過NVL功能? https://www.w3schools.com/sql/sql_isnull.asp – Tim

回答

0

編輯cars10的回答版本:

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

你可以嘗試使用COALESCE()分配一個零值的情況下,一個null發現另有:

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 S代表列minPrice和null s用於列priceCOALESCE()函數使它們「相等」。

+0

它不工作,它仍然不顯示空顏色 – Alegou20

+0

您需要在兩個連接條件上使用合併。如果p.color和b.color爲空,則將它們設置爲可以加入的「NULL」之類的文本值。我編輯了這個答案,但它可能還沒有出現(等待同行評議)。 –

+0

@Jeremy:是的,感謝編輯!我簡單地忽略了'color'-business ;-) – cars10m