2016-10-12 4 views
0

私は年齢のリストを含むテーブルを持っていますが、この列はNULLSを持つことができるというクエリを持っています。私は18歳以上のユーザーを含む結果を得ようとしています。ユーザーの年齢がNULLであれば、その結果も欲しいと思います。ここでは、以下で何をしようとしているのか、その結果を簡略化したものです。範囲または列の列名を検索する方法はnullです

SELECT * FROM TABLE WHERE (Table.Column >= 18 OR Table.Column IS NULL) 

-Returnsすべての年齢層のユーザーとヌル

SELECT * `FROM TABLE WHERE ((Table.Column >= 18) OR (Table.Column IS NULL)) 

-Returnsすべての年齢層のユーザーとヌルが

SELECT * FROM TABLE WHERE (Table.Column >= 18 NOT BETWEEN 1 AND 17) 

-Returnsユーザーのみ18+は、NULLS

を返しません。
SELECT * `FROM TABLE WHERE ((Table.Column >= 18) 

- 返品のみユーザー18+はNULLを返しません

何が起こっているかについての洞察は祝福になります。これは1300行のクエリの一部であり、これは私がそれを単純化することができる最高です。私はあなたが説明することができない、そしておそらくハッキーな仕事が順調に進んでいるかもしれないことを心に留めておく必要があるかもしれません。

詳細については、擬似コードでは全体のクエリは次のとおりです。私の場合のために

 SELECT ColumnA, ColumnB, 
     CASE 
     WHEN (Condition 1), 
     WHEN (Condition 2) 
    ELSE 'N/A' END AS [Complete], 
     CASE 
     WHEN (Condition 1), 
     WHEN (Condition 2) 
    ELSE Column END AS [Column], 
    ColumnC, ColumnD 
    FROM 
    LEFT OUTER JOIN Table A on A.Column = B.Column 
    LEFT OUTER JOIN Table C on A.Column = B.Column 
    LEFT OUTER JOIN Table D on A.Column = C.Column 
WHERE (
Condition1, 
and Condition2, 
and (Table.Column >= 18 OR Table.Column IS NULL) 
)UNION 
SELECT 
MAX([column]) AS [column], 
MAX([MyColumn] AS [My Column], 
FROM (
SELECT 
column], 
MyColumn, 
CASE 
WHEN (Condition 1), 
WHEN (Condition 2) 
else 'N/A' end as [Complete] 
CASE 
WHEN (Condition 1), 
WHEN (Condition 2) 
ELSE Column END AS [Column], 
Column3 
WHERE (Condition1) 
AND Condition2 
) 
and (Table.Column >= 18 OR Table.Column IS NULL) 
GROUP BY [ColumnName] 
UNION 
SELECT * FROM TABLE 
+0

私は自分を置きますNUMBER型の私は思いますか? –

+0

dbmsに応じてCOALESCEまたはIS NULLを使用するのはなぜですか? SQLServer .... SELECT * FROM TABLE WHERE COALESCE(Table.Column、18)> = 18 18 + sとNULLを取得します。 NULLを除外したい場合..... SELECT * FROM TABLE WHERE COALESCE(Table.Column、17)> = 18 – AntDC

+0

WHERE Table.Column IS NOT NULLを指定する方法はありますか?Table.Columnを指定する必要があります> = 18? –

答えて

0

私はそこから、3種類のサブクエリで一緒に組合された3つのテーブルを入れていたあなたは「列」という名前の列があるwhere句

SELECT A.* FROM (
Select * FROM TABLE1 
) A 
WHERE (A.ColumnOne >= 18 OR ColumnOne IS NULL) 
UNION 
SELECT B.* FROM (
Select * FROM TABLE2 
) B 
WHERE (B.ColumnOne >= 18 OR ColumnOne IS NULL) 
UNION 
SELECT C.* FROM (
Select * FROM TABLE2 
) C 
WHERE (C.ColumnOne >= 18 OR ColumnOne IS NULL) 
関連する問題