powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Правильно ли я применяю такую конструкцию?
2 сообщений из 2, страница 1 из 1
Правильно ли я применяю такую конструкцию?
    #39142143
PCContra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть родительская таблица t1 , в которой поле person показывет, кто может редактировать эту запись и записи в дочерней таблице t2
Пусть это выглядит так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE TABLE t1 (
id SERIAL PRIMARY KEY,
name TEXT,
person INT
);
CREATE TABLE t2(
snum  SERIAL PRIMARY KEY,
amount DECIMAL,
id INT NOT NULL REFERENCES t1
);


Далее, допустим, происходит UPDATE значения amount в таблице t2, где snum=$snum . Надо выполнить update, но такой, чтобы
значение person в родительской таблице t1 было "наше", скажем, $person .
Я составил такой запрос:
Код: sql
1.
UPDATE t2 a SET amount = $amount FROM t2 b LEFT JOIN t1 USING (id) WHERE a.snum = $snum AND person = $person;



Потестил, значения меняются, как и ожидал. Но я что-то плохо понимаю саму такую конструкцию. Как она работает?
Я думаю, так:
Ищется строка в таблице, для которой выполняется update, с a.snum=$snum.
Update выполняется, если в таблице FROM находится хотя бы одна строка.
В таком случае, откуда берется связка таблицы a и b?

Делал так:
t1
idnameperson1'яблоки'12'груши'2


t2
snum amountid115122013302
Код: sql
1.
UPDATE t2 a SET amount = 100 FROM t2 b LEFT JOIN t1 USING (id) WHERE a.snum = 2 AND person = 1;


меняет вторую строку (как и ожидалось)

Код: sql
1.
UPDATE t2 a SET amount = 100 FROM t2 b LEFT JOIN t1 USING (id) WHERE a.snum = 2 AND person = 2;


не меняет вторую строку (как и ожидалось)
Вопрос: как это работает? Ведь если исходить из такой логики - что
FROM <таблица для update>, <t2 LEFT JOIN t1 USING(id)>
условие для второго запроса также должно выполняться, т.к. для каждой строки таблицы (перечислены через запятую) берутся все строки следующей таблицы.
Но, похоже, не так
--
Россия - отличная страна!
...
Рейтинг: 0 / 0
Правильно ли я применяю такую конструкцию?
    #39142640
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
UPDATE t2 a SET amount = $amount FROM t2 b LEFT JOIN t1 USING (id) WHERE a.snum = $snum AND person = $person;



лучше так

UPDATE t2 a SET amount = $amount
FROM t2 a LEFT JOIN t1on a.id = t1. id
WHERE a.snum = $snum AND person = $person;

или даже так

UPDATE t2 SET amount = $amount
WHERE snum = $snum
AND exists( select * from t1 where person = $person
and t1. id = t2. id);
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Правильно ли я применяю такую конструкцию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]