как получить строки, которые не имеют данных - PullRequest
0 голосов
/ 18 октября 2019

У меня есть таблица под названием Temp с 15 столбцами. В этой таблице col1 является первичным ключом, а все остальные являются обычными ключами (которые могут иметь нулевые значения). Я вставил данные в таблицу вместе с датой (в col15). Если данные недоступны для всех столбцов, кроме столбца первичного ключа, я вставил значение столбца первичного ключа и значение столбца даты (столбец 15), а для всех остальных столбцов - нулевые значения.

Temp
------------------------------------------------------
col1  col2 col3 col4 col5 ....................col15
------------------------------------------------------
o124  xxx   xxx  xxx  null                    2019-10-17
o236  null  xxx  xxx  xxxx                    2019-10-17
o437  xxx   xxx  null xxxx                    2019-10-17
o448  xxx   null xxx  xxxx                    2019-10-17
o456  null  null null null                    2019-10-17
o458  null  null null null                    2019-10-17

СейчасЯ хочу получить строки, которые не имеют значений во всех столбцах, кроме столбца первичного ключа (столбец 1) и столбца даты (столбец 15).

Вывод будет

------------------------------------------------------
col1  col2 col3 col4 col5 ....................col15
------------------------------------------------------
o456  null  null null null                  2019-10-17
o458  null  null null null                  2019-10-17

Какой должен быть запрос, который мне нужно написать.

Спасибо

Ответы [ 3 ]

3 голосов
/ 18 октября 2019

«Найти, где все столбцы, кроме 1 и 15, являются нулевыми»:

SELECT * 
FROM temp
WHERE
  --col1 is PK and won't be null so we don't need to check it
  col2 IS NULL AND
  col3 IS NULL AND
  ...
  col14 IS NULL AND
  col15 IS NOT NULL --check it if it's a hard requirement that it must still have a value

Обратите внимание, что, хотя запрос от Tejash будет работать, как правило, старайтесь избегать использования функций, работающих с табличными значениями,в предложении where это означает, что oracle должен оценивать результат функции для каждой строки (это может быть миллионы вычислений) и обычно запрещает использование индексов), если не указан функциональный индекс, что редко). В этом случае маловероятно, что этот запрос может быть разумно проиндексирован, если вы не создадите другой столбец с флагом, указывающим, все ли поля пусты, но thisbadvuce служит предупреждением для истинного более общего случая;например, не конвертируйте миллион дат в строку, чтобы сопоставить их с одним строковым параметром, конвертируйте один строковый параметр в дату и сравнивайте ее с датой в таблице (неконвертируемые данные строки)

2 голосов
/ 18 октября 2019

Вы можете просто использовать функцию coalesce:

Select * from your_table 
Where coalesce(col2, col3, col4, ... , col14) is null;

Приветствия !!

0 голосов
/ 18 октября 2019

Что-то вроде select * from Temp where (col2 != null or col3 != null or ... or col14 != null) должно быть хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...