2012-07-16 53 views
0

我有以下查詢:sqlite的,如果沒有行返回打印0

SELECT user_tag, device_type, ip_address 

FROM 
devices 

WHERE (user_tag like '|%frt%|' 
OR user_tag like '|%bck%|' 
OR user_tag like '|%ppp%|' 
OR user_tag like '|%smes%|' 
OR user_tag like '|%gm%|') 

現在如果記錄只返回的user_tag「FRT」我只收到一列(如你所期望的)。有沒有辦法爲空白行設置一個默認值,例如,對於不返回任何實際數據的行,我會得到一個'0'或類似的值?

回答

1

此查詢是一個'草稿'。由於我使用的是所有類型的SQL,有時我在SQLite特定的語法方面遇到了問題,而且我現在沒有任何方法來測試此查詢,因此可能需要修改一些語法。

但它得到了想法... 使用你的硬編碼值的列表,使其成爲一個子查詢,並做一個左連接,而不是在哪裏。

當給定的類型沒有任何用戶標記時,user_tag_exists應該爲0。

Select CASE WHEN d.user_tag is null THEN '0' ELSE '1' END AS user_tag_exists, 
     tagTypes.tagType, 
     d.user_tag, d.device_type, d.ip_address 
From 
(
    Select '%frt%' as tagType 
    UNION 
    Select '%bck%' as tagType 
    UNION 
    Select '%ppp%' as tagType 
    UNION 
    Select '%smes%' as tagType 
    UNION 
    Select '%gm%' as tagType 
) as tagTypes 
left join 
    devices d 
     on d.device_type like tagTypes.tagType 
+0

感謝你們。我在這裏提供了一個SQL小提琴:http://sqlfiddle.com/#!3/c6b52/1,它似乎沒有正確運行。想法? – Ben 2012-07-16 19:57:14

+0

嘿,本,這是一個非常整潔的工具!我一定會在將來使用它。我正在更新答案的變化..你設置數據的方式,你給device_type ppp..bck ..等。但在你的例子中,你的地方是在user_tag。 – Scen 2012-07-16 20:04:34

+0

啊,我現在看到了。 user_tag是正確的選擇,我只是混淆了它們 – Ben 2012-07-16 20:08:31

0

我不知道,如果你想:

  1. 的「0」在列,而不是空
  2. 行中的值與如果 沒有user_tag存在就像一個值0。

如果您正在尋找1),您可以使用CASE語句。

SELECT 
     user_tag, 
     CASE WHEN device_type is not null THEN device_type ELSE '0' END as device_type, 
     ip_address 

FROM 
devices 

WHERE (user_tag like '|%frt%|' 
OR user_tag like '|%bck%|' 
OR user_tag like '|%ppp%|' 
OR user_tag like '|%smes%|' 
OR user_tag like '|%gm%|') 

這會給你的 '0',即使DEVICE_TYPE一個DEVICE_TYPE爲空。

+0

謝謝。我收到錯誤[HY000]在「,」附近的錯誤:語法錯誤(1) – Ben 2012-07-16 17:42:07

+0

對不起,我現在沒有辦法檢查我的SQLite語法。我編輯了查詢,我忘了添加** end **語句。我也添加了**作爲**語句。 – Scen 2012-07-16 17:55:54

+0

更進一步的看,我實際上是在尋找選項#2'如果沒有user_tag存在就像是一個'0'的行。「 – Ben 2012-07-16 18:12:49