Oracle Sql НЕ NULL xor NULL? - PullRequest
       3

Oracle Sql НЕ NULL xor NULL?

9 голосов
/ 29 апреля 2011

Я выбираю группу записей и хочу отфильтровать столбец в логике XOR - НЕТ НУЛЬ xor НЕДЕЙСТВИТЕЛЬНО.

--basic
SELECT make, model
FROM cars

results
--------
ford   taurus
ford   (null)
toyota camry
toyota (null)
honda  (null)

--Obviously XOR is not a real Oracle operator
--This is what I'm trying to do..
SELECT make, model
FROM cars
WHERE model IS NOT NULL
  XOR model IS NULL 

results (pulls records where model IS NOT NULL, falling back to NULL if necessary)
--------
ford   taurus
toyota camry
honda  (null)

Может кто-нибудь дать мне представление о том, как достичь желаемого результата, который я ищу? Я борюсь с этим!

Большое спасибо!

Ответы [ 3 ]

12 голосов
/ 29 апреля 2011
SELECT  make, model
FROM    (
        SELECT  c.*,
                ROW_NUMBER() OVER (PARTITION BY make ORDER BY model NULLS LAST) AS rn
        FROM    cars c
        )
WHERE   NOT (rn > 1 AND model IS NULL)
3 голосов
/ 29 апреля 2011
SELECT make, model
FROM cars 
WHERE model IS NOT NULL
UNION -- Add makes that don't have any specific model
SELECT make, model 
FROM cars 
WHERE make NOT IN 
  (SELECT make
  FROM cars 
  WHERE model IS NOT NULL)
2 голосов
/ 03 мая 2011

Сначала я проголосовал за ответ Класа Линдбека, но теперь мне интересно, дает ли это вместо этого желаемый результат:

SELECT make, model
  FROM Cars 
 WHERE model IS NOT NULL
UNION 
SELECT make, NULL
  FROM Cars 
MINUS
SELECT make, NULL
  FROM cars 
 WHERE model IS NOT NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...