0

私はテーブルを持っています。

id    field1    field2
1     1000      500
2     1001      500
3     1002      500
4     1003      500
5     1004      500
6     1005      500
7     1006      500
8     1004      (null)
9     1003      (null)
10    1002      (null)

mysqlクエリを作成する方法:

field2がnullでない場合は、field2がnullでないすべての場所を表示します(idは1から7)。

また、すべてのfield2がnull(1から7までのIDのないテーブル)の場合、field2がnull(8から10までのid)であるすべてのfield2を表示します。

4

7 に答える 7

1

これを使用しfield2ないすべてのレコードを取得する場合NULL

SELECT id FROM table_name WHERE field2 <> NULL;

逆にしたい場合はこれを使用してください

SELECT id FROM table_name WHERE field2 IS NULL;
于 2012-12-18T13:36:31.570 に答える
1

多分あなたは値がNULLのfield1場合の値を表示することを意味しますfield2

SELECT COALESCE(field2, field1) fieldValue
FROM   tableName
于 2012-12-18T13:41:31.373 に答える
1
SELECT *
FROM tab
WHERE NOT EXISTS ( SELECT id 
                   FROM tab 
                   WHERE field2 IS NOT NULL LIMIT 1) 
AND field2 IS NULL
OR field2 IS NOT NULL

明確にするためだけに

OPは次のよ​​うな声明を探しています

このデータを持っている

id    field1    field2
6     1005      500
7     1006      500
8     1004      (null)
9     1003      (null)

結果は

id    field1    field2
6     1005      500
7     1006      500

このデータを持っている

id    field1    field2
8     1004      (null)
9     1003      (null)

結果は

id    field1    field2
8     1004      (null)
9     1003      (null)
于 2012-12-18T13:55:30.903 に答える
1

これを試して。

SELECT t.id,t.field1,t.field2
FROM t
WHERE id in (select id from t where field2 is not null)
or (select sum(ifnull(field2,0)) from t)=0

null以外のフィールド2が少なくとも1つある場合は、field2がnullではない行を返します。すべてのfield2がnullの場合、すべての行が返されます。

それがあなたが必要とするものであるかどうかはわかりません。

于 2012-12-18T14:05:00.783 に答える
0

多分あなたはそのようなものが欲しい

DECLARE @NullFields int;
set @NullFields=0;
select @NullFields= count(*) from tab Where field2 IS NOT NULL
if @NullFields == 0
    SELECT id FROM table_name WHERE field2 <> NULL;
else
    SELECT id FROM table_name;

すべてのfields2がnullの場合、すべてを選択します。

于 2012-12-18T14:00:45.570 に答える
0

これはどうですか。注:これはtsql>> @@rowcount

--If `Any NOT null` you want to select `NOT null`
Select id,field1,field2 From T1 Where field2 IS NOT null

if (@@rowcount =0) --If `All null` you want to select `null`
    Select id,field1,field2 From T1 -- no need for Where field2 IS null
于 2012-12-18T13:56:36.123 に答える
0

私はあなたがすでに実用的な解決策を見つけたことを知っていますが、私はこのアプローチも好きです:

SELECT your_table.*
FROM your_table
WHERE
  field2 is not null =
  exists (select null from your_table where field2 is not null)

Exists (...)field2null以外のレコードが少なくとも1つある場合は、trueを返します。したがって、そのようなレコードが存在する場合は、すべての行を取得します。これは、nullfield2 is not null = true以外のすべてのレコードを取得することを意味します。field2

そのようなレコードが存在しない場合は、すべての行を取得します。これは、がnullfield2 is not null = falseであるすべてのレコードを取得することを意味します。field2

于 2012-12-18T20:12:52.820 に答える