簡體   English   中英

COALESCE和IFNULL不能按預期工作

[英]COALESCE and IFNULL not working as expected

當查詢中沒有找到行時,我正在嘗試輸出默認行。 這是我的查詢的示例:

SELECT 
COALESCE(site, 'STE') as site, 
instrument,
field

FROM Table1
WHERE site IN ('East', 'West')
AND DATE(tstamp) = "2016-09-07"
ORDER BY id desc

輸出是

+------+------------+-------+
| site | instrument | field |
+------+------------+-------+
| West | 0          | 0     |
+------+------------+-------+

對於ts​​amp 2016-09-07,網​​站“ West”有一行,“ East”沒有一行。 我嘗試搜索,發現可以使用COALESCE,還嘗試了IFNULL,但是我只得到上面的輸出。 我也嘗試過if(count(site)= 0,“ STE”,site)但我無法使它正常工作。

我的預期結果是

+------+------------+-------+
| site | instrument | field |
+------+------------+-------+
| West | 0          | 0     |
| STE  | NULL       | NULL  |
+------+------------+-------+   

我希望你們能幫助我。 提前致謝

coalesce()和ifnull()都基於行工作,這意味着如果記錄中存在空值,則它們可以替換空值。 但是,它們無法創建不存在的記錄-並且您沒有與East(或STE)匹配的記錄。

一個可能的解決方案是創建一個表,該表具有site字段的所有可能值,您可以在該表上保留聯接:

SELECT 
COALESCE(Table1.site, "STE") as site, 
Table1.instrument,
Table1.field

FROM LookupTable lt
LEFT JOIN Table1 ON lt.site=Table1.site
WHERE lt.site IN ('East', 'West')
AND DATE(Table1.tstamp) = "2016-09-07"
ORDER BY id desc

如果“ STE”不在table1.site中,則它將不會返回結果中。

您可以改為工會:

SELECT 
site, 
instrument,
field

FROM (SELECT 'West' [Site], 0 [instrument], 0 [field]) table1
WHERE site IN ('East', 'West')
UNION 
SELECT 'STE', NULL, NULL

請注意,通過使用“ STE”,您正在查找列名“ STE”,而不是值“ STE”(單引號)

編輯

您需要一個控制表來指示要查找的值,或者您必須對規則進行硬編碼。 您必須先指定應該存在的內容,才能找到缺少的內容。

這是一個選擇:

--Create and populate reference table "sites"
create table sites
    ([site] char (4))

INSERT INTO sites VALUES ('East')
INSERT INTO sites VALUES ('West')

-- Query against reference table
SELECT 
ISNULL(table1.site, 'STE'), 
instrument,
field
FROM (SELECT 'West' [Site], 0 [instrument], 0 [field]) table1
RIGHT JOIN sites on table1.[Site] = sites.[Site]

--or

-- Query against reference table
SELECT 
ISNULL(table1.site, 'STE'), 
instrument,
field
FROM sites
LEFT JOIN (SELECT 'West' [Site], 0 [instrument], 0 [field]) table1  on table1.[Site] = sites.[Site]

如果您對此有疑問,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM