C++Builder
  Начало   Форум   Помощь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Составить SQL запрос  (Прочитано 1851 раз)
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Составить SQL запрос
« : 09 Сентябрь 2015, 10:25:13 »

PostgreSQL.
Есть таблица sensors и там колонка:
№ датчика:
999
3
4
88

Есть другая таблица sensdatas:
№ датчика:
999
3
2
4
88
77

Мне надо выбрать из второй таблицы все номера датчика, которых нет в первой таблице.
Т.е. для этого примера мне нужен SQL запрос, который вернет две записи:
№ датчика:
2
77

Подскажите, пожалуйста, как должен выглядеть такой запрос?
Спасибо.
Записан
OVE
Участник


Сказали спасибо: +67/-0
Offline

Сообщений: 72


Re: Составить SQL запрос
« Ответ #1 : 09 Сентябрь 2015, 10:50:52 »

Что-то типа такого
Код:
Select sensdatas.№датчика from sensdatas where not(sensdatas.№датчика in (select sensors.№датчика from sensors))
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Составить SQL запрос
« Ответ #2 : 09 Сентябрь 2015, 12:03:24 »

Большое спасибо, буду пробовать.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Составить SQL запрос
« Ответ #3 : 09 Сентябрь 2015, 16:04:26 »

Еще просьба модифицировать запрос, для такого случая:
Таблица sensors и там колонка:
№ датчика:
999
3

Таблица sensdatas:
№ датчика:
999
3
4
4

Результат текущего запроса:
№ датчика:
4
4

Как убрать дубликаты?
Хотелось бы получить записи в единственном экземпляре. Спасибо.
Записан
SilverFish
Участник


Сказали спасибо: +14/-6
Offline

Сообщений: 786


Re: Составить SQL запрос
« Ответ #4 : 10 Сентябрь 2015, 11:55:02 »

Наверно так:
Код
SELECT sensdatas.id FROM sensdatas 
WHERE NOT(sensdatas.id IN (SELECT sensors.ser_num FROM sensors))
GROUP BY sensdatas.id ORDER BY sensdatas.id;
 
Записан
Tantos
А ты воспользовался поиском перед тем, как спросить?!
Давний друг


Сказали спасибо: +350/-28
Offline

Сообщений: 2181


« Ответ #5 : 23 Ноябрь 2016, 17:26:12 »

Нарисовался заказчик, мучительно вспоминаю SQL
Firebird 1.5, 3 диалект.
Таблица:
Код:
CREATE TABLE TIME_DISCOUNT (
    TDID   IDS /* IDS = INTEGER NOT NULL */,
    TIMES  TIME NOT NULL,
    WDAYS  NUMERIC(5,2),
    WEND   NUMERIC(5,2)
);
Задача - по известному значению времени TIMES определить соответствующие значения WDAYS и WEND при условии, что TIMES Пока наваялась такая порнография:
Код
SELECT MAX(times), wdays, wend FROM TIME_DISCOUNT WHERE times:t1
GROUP BY wdays, wend ORDER BY 1 DESC
 
Тогда первая запись результирующего набора будет содержать требуемое. Но хочется попроще и поэлегантней.
Можно еще ХП написать, которая будет дергать максимально значение TIMES, не превышающее введенное. а по нему пинать запроси вытаскивать требуемые значения, но опять не комильфо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  




....

Powered by SMF 1.1.21 | SMF © 2025, Simple Machines
Страница сгенерирована за 0.132 секунд. Запросов: 21.