SQLite - вопрос sql 101 - PullRequest
       7

SQLite - вопрос sql 101

2 голосов
/ 14 марта 2010

Я бы сделал что-то вроде этого:

  1. select * from cars_table where body not equal to null.
  2. select * from cars_table where values not equal to null And id = "3"

Я знаю, что синтаксис 'not равный' <>, но я получаю пустые результаты.

Для второй части я хочу получить набор результатов, в котором он возвращает только столбцы, которые имеют значение. Поэтому, если значение равно нулю, не включайте этот столбец.

Спасибо

Ответы [ 4 ]

2 голосов
/ 14 марта 2010

Вы не можете использовать операторы равенства для нулей, вы должны использовать is null и is not null.

Итак, ваш первый запрос будет:

select * from cars_table where body is not null;

Нет простого способа выполнить вторую операцию (за исключением столбцов, которые являются нулевыми). Я предполагаю, что вы имеете в виду не отображать столбец, если все строки имеют NULL для этого столбца, так как это было бы еще сложнее сделать это построчно. Оператор select ожидает список столбцов, которые будут отображаться, и точно покажет им, являются ли они нулевыми или нет.

Единственная возможность, которая приходит на ум, - это серия (по одному на столбец) выборок с группировкой, чтобы определить, имеет ли столбец только нулевые значения, а затем динамически создать новый запрос только с теми столбцами, которые не соответствуют этим критериям. *

Но это невероятно грязно и совсем не подходит для SQL - возможно, если вы расскажете нам обоснование запроса, может быть другое решение.

0 голосов
/ 14 марта 2010

Спасибо всем за ваши ответы.

Ну, у меня есть таблица с кучей столбцов. И я собираюсь найти конкретную машину и получить значения для этой машины ...

машина | руководство | автоматический | седан | силовые тормоза | реактивный двигатель

Хонда | правда | ложь | ложь | правда | ложь

мазда | ложь | правда | ложь | правда | правда

Итак, я хочу сделать -> выберите * из car_table, где car = 'mazda' и значения не равны false

Итак, я просто перебираю результат курсора и заполняю таблицу соответствующими столбцами и значениями. Где значения являются столбцами. Я думаю, я заменяю значения * для столбцов

Я знаю, что мог бы сделать это программно, но думал, что смогу сделать это просто с помощью sql

0 голосов
/ 14 марта 2010

В SQL NULL - это неизвестное значение. Оно не равно и не равно любому другому значению. Все операторы сравнения (=, <>, <,> и т. Д.) Возвращают false, если любое из сравниваемых значений равно NULL. (Я не знаю, сколько вам лет, поэтому я не могу сказать, что вам 24 года, но я также не могу сказать, что вам не 24 года.)

Как уже упоминалось, вы должны использовать IS NULL или IS NOT NULL вместо этого при проверке значений NULL.

0 голосов
/ 14 марта 2010

Сравнение с NULL выполняется не с <>, а с is null и is not null:

select * 
from cars_table
where body is not null

А:

select *
from cars_table
where values is not null
    and id = '3'


NULL не является нормальным значением и должно обрабатываться иначе, чем стандартные значения.

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