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'に対してのみ返される場合、(予想どおり)1行しか受信しません。空白行のデフォルト値を設定する方法はありますか?たとえば、実際のデータを返さない行に対して「0」などの値を受け取りますか?

4

2 に答える 2

1

このクエリは「ラフドラフト」です。私はすべてのタイプのSQLを使用しているため、SQLite固有の構文に問題が発生することがあります。現在、このクエリをテストする方法がないため、構文を変更する必要がある場合があります。

しかし、それはアイデアを交差させます...ハードコードされた値のリストを使用して、それをサブクエリにし、whereの代わりに左結合を実行します。

指定されたタイプのユーザータグがない場合、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
于 2012-07-16T19:02:06.730 に答える
0

あなたが望むかどうかはわかりません:

  1. nullではなく列の値「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%|')

これにより、 device_typeがnullの場合でも、 device_typeは「0」になります。

于 2012-07-16T17:32:42.733 に答える