table1(
id int PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
some_size INTEGER NOT NULL
);
CREATE TABLE table2(
id int PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
t1_id INTEGER NOT NULL,
some_int INTEGER NOT NULL,
Foreign Key (t1_id) REFERENCES table1 (id)
);
Их заполнение:
INSERT INTO table1(some_size) VALUES(5), (2);
INSERT INTO table2(t1_id, some_int) VALUES(1, 6), (1, 6);
При следющем запросе как сделать так, чтобы в запросе не учитывалась дважды одна и так же строка table1?
SELECT SUM(t1.some_size) FROM table1 t1
JOIN table2 t2 on t2.t1_id = t1.id
WHERE t2.some_int = 6;
вывод 10, я же ожидаю получить 5.
В table2 в some_int две строки имеют значение равное 6
это специально так, чтобы сэмулировать ситуацию. Через having тоже не получается. SELECT SUM(t1.some_size) FROM table1 t1 INNER JOIN table2 t2 on t2.t1_id = t1.id WHERE t2.some_int = 6 GROUP BY t1.id, t2.id HAVING COUNT(t1.*) < 2;
ну так ты выбираешь все id в итоге
Перепишите на exist и не парьтесь
а мне только 1 строка table1 нужна в данном условии. Как бы не учитывать вторую и джойн сохранить?
вот же условие WHERE t2.some_int = 6;
join может множить строки, что у тебя и происходит, сделай как говорят через exists
сделал, всё ок.
Обсуждают сегодня