72 похожих чатов

Ребят, есть таблица совместимости кабелей и телефонов id_cable|id_phone|last_updated

|created |
--------|--------|-------------------|-------------------|
1| 6|2020-11-16 18:29:30|2020-11-16 18:29:30|
1| 5|2020-11-16 18:29:30|2020-11-16 18:29:30|
1| 4|2020-11-16 18:29:30|2020-11-16 18:29:30|
3| 3|2020-11-16 18:29:30|2020-11-16 18:29:30|
3| 2|2020-11-16 18:29:30|2020-11-16 18:29:30|
3| 1|2020-11-16 18:29:30|2020-11-16 18:29:30|
3| 5|2020-11-16 19:56:33|2020-11-16 19:56:33|

как проверить есть ли нужная мне пара в таблице?

26 ответов

22 просмотра

https://www.w3schools.com/sql/sql_exists.asp

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса

сделал через count(*) теперь не могу триггер настроить. вообще ни одного нотиса не выводит CREATE OR REPLACE FUNCTION check_compatibility_phone_cable() RETURNS TRIGGER AS $$ DECLARE -- Declare aliases for user input. -- Declare a variable exist_var INTEGER; BEGIN SELECT INTO exist_var count(*) from cable_possible where id_phone = new.id_phone AND id_cable = new.id_cable; IF exist_var = 0 THEN RAISE NOTICE 'Телефон и провод не совместимы'; END IF; IF exist_var > 0 THEN RAISE NOTICE 'Ура, телефон и провод совместимы'; END IF; RETURN NEW; END; $$language plpgsql; CREATE TRIGGER check_compatibility_phone_cable BEFORE UPDATE ON Orders FOR EACH ROW EXECUTE PROCEDURE check_compatibility_phone_cable();

🅰️RTi 🎧 🅰️Ⓜ️iGO
сделал через count(*) теперь не могу триггер наст...

А Вы лучше покажите SQLfiddle (и проблема будет найдена в процессе подготовки, скорее всего ;) )... а почему триггер [только] на UPDATE (он, с виду, больше для вставки подходит)? > сделал через count(*) (Ехидно) А вот Вы, чтобы узнать, например, есть ли ложки на столе, всегда их все пересчитываете, а потом делаете вывод? ;) Т.е. есть же EXISTS, зачем COUNT?

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Yaroslav Schekin
А Вы лучше покажите SQLfiddle (и проблема будет на...

я пробовал exist, но так и не понял как он работает. написано возвращает тру, но у меня почему то 3 возвращал когда я его в переменную писал. сейчас обновил с UPDATE на INSERT и заработало. я этот кусок с другого своего тригера скопипровал и даже не заметил что там менять надо, спасибо.

🅰️RTi 🎧 🅰️Ⓜ️iGO
я пробовал exist, но так и не понял как он работае...

> я пробовал exist, но так и не понял как он работает. Так, как написано. > у меня почему то 3 возвращал когда я его в переменную писал. Покажите код.

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Yaroslav Schekin
> я пробовал exist, но так и не понял как он работ...

сейчас напишу снова, минутку. я его уже удалил

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Yaroslav Schekin
> я пробовал exist, но так и не понял как он работ...

CREATE OR REPLACE FUNCTION check_compatibility_phone_cable() RETURNS TRIGGER AS $$ DECLARE -- Declare aliases for user input. -- Declare a variable exist_var BOOLEAN := f; BEGIN exist_var := EXISTS (SELECT * FROM cable_possible WHERE id_phone = new.id_phone AND id_cable = new.id_cable); IF exist_var = f THEN RAISE NOTICE 'Телефон и провод не совместимы'; END IF; IF exist_var = t THEN RAISE NOTICE 'Ура, телефон и провод совместимы'; END IF; RETURN NULL; END; $$language plpgsql;

🅰️RTi 🎧 🅰️Ⓜ️iGO
CREATE OR REPLACE FUNCTION check_compatibility_pho...

exist_var := select case when EXISTS (SELECT * FROM cable_possible WHERE id_phone = new.id_phone AND id_cable = new.id_cable) then t else f end;

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Ilya Zviagin
exist_var := select case when EXISTS (SELECT * FRO...

ERROR: syntax error at or near "select" LINE 12: exist_var := select case when EXISTS (SELECT * FROM cable_po... ^ SQL state: 42601 Character: 200

🅰️RTi 🎧 🅰️Ⓜ️iGO
ERROR: syntax error at or near "select" LINE 12: ...

Возможно , присваивание не так пишется, этого я не знаю как оно в PG.

🅰️RTi 🎧 🅰️Ⓜ️iGO
ERROR: syntax error at or near "select" LINE 12: ...

Может быть select exist_var := case when EXISTS (SELECT * FROM cable_possible WHERE id_phone = new.id_phone AND id_cable = new.id_cable) then true else false end;

🅰️RTi 🎧 🅰️Ⓜ️iGO
CREATE OR REPLACE FUNCTION check_compatibility_pho...

s/f/false/ s/t/true/ И зачем писать "IF boolean_variable = true", когда можно просто "IF boolean_variable"? Ну и так далее...

Yaroslav Schekin
s/f/false/ s/t/true/ И зачем писать "IF boolean_va...

о, Ярослав , ты же точно знаешь, как присваивание из запроса в PL

Ilya Zviagin
Может быть select exist_var := case when EXISTS (...

select case when EXISTS (SELECT * FROM cable_possible WHERE id_phone = new.id_phone AND id_cable = new.id_cable) then t else f end INTO exist_var;

Ilya Zviagin
о, Ярослав , ты же точно знаешь, как присваивание ...

Оба варианта работают (":=" и "="), никакие CASE не нужны (EXISTS же возвращает boolean).

Yaroslav Schekin
Оба варианта работают (":=" и "="), никакие CASE н...

И его можно просто в выражении писать, без SELECT ?

Ilya Zviagin
И его можно просто в выражении писать, без SELECT ...

Да. См. https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-ASSIGNMENT

Yaroslav Schekin
Да. См. https://www.postgresql.org/docs/current/pl...

ок, не знал.. Да я и вообще не знаю PG PL

Ilya Zviagin
ок, не знал.. Да я и вообще не знаю PG PL

Я так понимаю, что он в существенной степени "содран" c PL/SQL (Oracle). В документации даже есть вот такой раздел: https://www.postgresql.org/docs/current/plpgsql-porting.html

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Артём
select case when EXISTS (SELECT * FROM cable_poss...

ERROR: column "t" does not exist LINE 1: ... = new.id_phone AND id_cable = new.id_cable) then t else f e... ^ QUERY: select case when EXISTS (SELECT * FROM cable_possible WHERE id_phone = new.id_phone AND id_cable = new.id_cable) then t else f end CONTEXT: PL/pgSQL function check_compatibility_phone_cable() line 11 at SQL statement SQL state: 42703

🅰️RTi 🎧 🅰️Ⓜ️iGO
CREATE OR REPLACE FUNCTION check_compatibility_pho...

исправьте f на false и t на true и будет вам счастье

🅰️RTi 🎧-🅰️Ⓜ️iGO Автор вопроса
Артём
исправьте f на false и t на true и будет вам счаст...

спасибо, я думал f и t это сокращения, видел в каком-то примере. NOTICE: Ура, телефон 5 и провод 1 совместимы INSERT 0 0

Похожие вопросы

Обсуждают сегодня

Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
5
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Карта сайта