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

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

Сообщений: 789


« : 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 Offline

Сообщений: 72


« Ответ #1 : 09 сентября 2015, 10:50:52 »

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

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

Сообщений: 789


« Ответ #2 : 09 сентября 2015, 12:03:24 »

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

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

Сообщений: 789


« Ответ #3 : 09 сентября 2015, 16:04:26 »

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

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

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

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

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

Сообщений: 789


« Ответ #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 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]   Вверх
  Печать  
 
Перейти в: