MySQL IF NOT NULL、次に1を表示、それ以外の場合は0を表示


104

ここでは少し複雑なディスプレイを使用しています。見落としているIF / ELSE機能があると確信しています。

クエリを実行している2つのテーブル(顧客、住所)があります。最初のレコードにはメインレコードがありますが、2番目のレコードにはLEFT JOINするレコードがある場合とない場合があります。

アドレステーブルにレコードがない場合、ゼロを表示したいと思います。そして、レコードが存在する場合、1のみを表示します。

これまでに試みたこと:

SELECT c.name, COALESCE(a.addressid,0) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

この最初の例はそれをしません。しかし、私はCOALESCEを間違って使用している可能性があります。

nullの場合は0、何かが存在する場合は1を表示するにはどうすればよいですか?


回答:


211

の代わりにCOALESCE(a.addressid,0) AS addressexists、次を使用しますCASE

CASE WHEN a.addressid IS NOT NULL 
       THEN 1
       ELSE 0
END AS addressexists

またはより単純:

(a.addressid IS NOT NULL) AS addressexists

これTRUE1、MySQLおよびFALSEとして表示されるため機能します0


96
SELECT c.name, IF(a.addressid IS NULL,0,1) AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

17

C / C ++から来て、これが機能することを期待している場合は注意してください。

select if(name, 1, 0) ..

Cとは異なり、 'name'がNULLでない場合でも、false条件がトリガーされ、上記のステートメントは0を返します。したがって、NULLまたは空の文字列を明示的にチェックすることを忘れないでください。

 select if(name is null or name = '', 0, 1)

上記の PS オイゲンの例は正しいですが、このニュアンスは驚きで私を捕らえたので、明確にしたかったのです。


16
SELECT 
    c.name, 
    CASE WHEN a.addressid IS NULL THEN 0 ELSE 1 END AS addressexists
FROM customers c
LEFT JOIN addresses a ON c.customerid = a.customerid
WHERE customerid = 123

2

WHEREを使用しない別の方法、これを試してください。

空の値とNULL値の両方を選択します

SELECT ISNULL(NULLIF(fieldname,''))  FROM tablename

空の文字列の場合はnullが設定され、その場合もtrueになります。


また有用:テーブル名からIFNULL(fieldname、 "1")を選択します。
PodTech.io

1

MySQLの最新バージョンでは、実際にIFステートメントを使用できます。

IF(expr,if_true_expr,if_false_expr)

IE:

SELECT name, IF(ISNULL(name), 'robot', 'human') AS type
FROM visitors

0

TSQL内では、次のことを試すことができます。

SELECT IIF(a.addressid IS NULL, 0, 1) AS addressexists

SQL Serverは動作するはずです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.