Выберите Запрос в SQL + Все значения в столбцах - PullRequest
4 голосов
/ 26 сентября 2008

У меня есть таблица Table1 со столбцами id1, id2, id3 все столбцы обнуляются

Я могу ввести ноль или значение для всех столбцов в строках.

У меня вопрос: мне нужно выбрать строки, у которых все значения столбцов не должны быть нулевыми.

Спасибо


В таблице всего около 300 столбцов. Я не могу сделать свойство is null для всех столбцов в состоянии where.

Ответы [ 9 ]

3 голосов
/ 26 сентября 2008

Не понимаю, почему этот вопрос получает отрицательные отзывы - этот вопрос может быть распространен на людей, которые унаследовали большую таблицу от непрограммиста в сообществе (я знаю из предыдущего опыта), а также, если таблица неизвестна , Понизить это, потому что его столбцы «300» - бессмысленная ИМО.

3 голосов
/ 26 сентября 2008

Ответ на использование «функции» для проверки нулевых значений является правильным. Синтаксис зависит от базы данных. Если ISNULL () не существует в вашей базе данных, попробуйте:

SELECT * FROM Table1, где id1 не равен NULL, а id2 не равен NULL и id3 не равен NULL

И нет возможности сократить это, даже если в вашей таблице 300 полей.

2 голосов
/ 26 сентября 2008

Вам нужно сделать это:

SELECT *
FROM yourtable
WHERE
    column1 IS NOT NULL
AND column2 IS NOT NULL
AND column3 IS NOT NULL
AND ....
2 голосов
/ 26 сентября 2008

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

В противном случае лучше всего делать это прогрессивно - захватывать метаданные таблицы, проходить через столбцы и динамически создавать SQL оттуда. Большинство языков кодирования имеют доступ к метаданным таблиц, но для этого не требуется второй SQL.

Но лучше всего подумать, как мне лучше оформить стол.

1 голос
/ 26 сентября 2008

Извините - я могу быть немного толстым здесь. Вы пытаетесь вернуть строки, у которых что-то есть в одном из столбцов (кроме столбца id)?

Не можете ли вы сделать;

create vw_View_Fields1to5 as 
  select id from employees 
  where name is not null or description is not null or field3 is not null 
  or field4 is not null or field5 is not null;
create vw_View_Fields6to10 as 
  select id from employees 
  where field6 is not null or field7 is not null or field8 is not null 
  or field 9 is not null or field10 is not null;
(etc)

select id from vw_View_Fields1to5
union 
select id from vw_View_Fields6to10 .... (etc)

Вам, конечно, придется взять DISTINCT или что-то еще, чтобы вырезать строки, которые попадают в несколько видов.

Если вы хотите получить обратно строки, которые НИЧЕГО не имеют в любом столбце, кроме id, вы должны переключить ', или бла не равно нулю ', чтобы быть , а бла равно нулю ' (и т.д.).

Это имеет смысл ... или я что-то упустил? : -)

РЕДАКТИРОВАТЬ: На самом деле, я считаю, что процесс UNION все равно будет возвращать только отдельные строки (в отличие от UNION ALL), но я могу ошибаться - на самом деле я не пробовал это .... (пока!)

1 голос
/ 26 сентября 2008

Вы хотите сказать, что хотите выбрать строки, в которых ни один из столбцов не является нулевым?

</p> <pre> SELECT id1, id2, id3 FROM Table1 WHERE id1 IS NOT NULL AND id2 IS NOT NULL AND id3 IS NOT NULL </pre> <p>

0 голосов
/ 29 сентября 2008

Впервые, каким бы ни был Георгий, Инграмма или Робсофт. Однако для последующих вещей вы можете по возможности изменить таблицу и добавить еще один столбец, называемый CSELECTFLAG, и первоначально обновил его до Y для всех столбцов, которые имеют значения, и N для других. Каждый раз, когда есть вставка, это необходимо обновить. Это поможет сделать ваши последующие запросы быстрее и проще.

0 голосов
/ 26 сентября 2008

Вы просто читаете данные или хотите попробовать обновить данные строки?

Мне просто интересно, есть ли что-то, что вы можете сделать, сделав полдюжины представлений, каждое из которых, скажем, на 50 столбцов будет НЕ ПУСТО (NULL), а затем связать их с каким-то оператором EXISTS или UNION?

Не могли бы вы рассказать нам немного больше о том, что вы хотите сделать с набором результатов?

0 голосов
/ 26 сентября 2008

вы можете попробовать хранимую процедуру CLR (если вы используете SQL Server) или переместить эту логику на другой уровень вашего приложения, используя C # или любой другой язык, который вы используете.

другой вариант - создать запрос динамически, объединить предложение WHERE и выполнить EXECute динамически сгенерированный запрос.

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