Найти пустые значения

Тема в разделе "Базы данных", создана пользователем RedRabbit, 27 авг 2014.

Статус темы:
Закрыта.
Модераторы: latteo
  1. RedRabbit

    RedRabbit

    Регистр.:
    11 июл 2008
    Сообщения:
    606
    Симпатии:
    250
    Появилась задачка. Есть 4 таблицы

    Код:
    CREATE TABLE [table1] (
      [field1] TEXT,
      [field2] TEXT,
      [field3] TEXT,
      [field4] TEXT,
      [field5] TEXT,
      [field6] TEXT,
      [field7] TEXT,
      [field8] TEXT,
      [field9] TEXT,
      [field10] TEXT,
      CONSTRAINT [] PRIMARY KEY ([field1]) ON CONFLICT REPLACE);
    
    CREATE TABLE [table2] (
      [field1] TEXT,
      [field2] TEXT,
      [field3] TEXT,
      [field4] TEXT,
      [field5] TEXT,
      CONSTRAINT [] PRIMARY KEY ([field2]) ON CONFLICT REPLACE);
    
    CREATE TABLE [table3] (
      [field1] TEXT,
      [field2] TEXT,
      [field3] TEXT,
      [field4] TEXT,
      [field5] TEXT,
      CONSTRAINT [] PRIMARY KEY ([field2]) ON CONFLICT REPLACE);
    
    CREATE TABLE [table4] (
      [field1] TEXT,
      [field2] TEXT,
      [field3] TEXT,
      [field4] TEXT,
      [field5] TEXT,
      CONSTRAINT [] PRIMARY KEY ([field2]) ON CONFLICT REPLACE);
    
    
    Таблица 1 основная и [field1] искомое значение, остальные таблицы содержат [field1] и его дополнительные свойства.

    Нужно найти в таблице 1 все строки, где [field4] равен пустоте, а также где [field1] не встречается в таблицах [table2],[table3],[table4]
    Синтаксис Sqlite.
    Помогите пожалуйста!

    Я правильно написал???
    Код:
    SELECT * FROM table1 WHERE field4='' AND field1 NOT IN (SELECT field1 FROM table2) AND field1 NOT IN (SELECT field1 FROM table3) AND field1 NOT IN (SELECT field1 FROM table4)
     
    Последнее редактирование: 27 авг 2014
  2. Demian12

    Demian12 Создатель

    Регистр.:
    13 авг 2014
    Сообщения:
    12
    Симпатии:
    9
    Привет!

    В принципе - да. Единственный момент, не учтено, что field4 может быть строкой из пробелов, а также NULL. Поэтому предлагаю так:
    Код:
    SELECT * FROM table1 WHERE (trim(field4)='' OR field4 is NULL) AND field1 NOT IN (SELECT field1 FROM table2 UNION SELECT field1 FROM table3 UNION SELECT field1 FROM table4);
     
    RedRabbit нравится это.
Статус темы:
Закрыта.