Tenho a tarefa de inserir dados em algumas tabelas e retornar dados de sua interseção em uma consulta. As tabelas são vinculadas através de campos específicos ( solditems
refere-se a products
e invoices
, invoices
refere-se a customers
etc). O truque aqui é que id
in invoices
é definido automaticamente na inserção de linha. A consulta a seguir retorna um resultado vazio, a menos que eu remova JOIN
on invoices
. Se isso SELECT
for feito em uma consulta separada, tudo estará OK. O que está errado?
WITH newid AS (
INSERT INTO invoices (customer,idate)
VALUES (777,(SELECT now()::date))
RETURNING id
),
sold AS (
INSERT INTO solditems (invoiceid,prod,qty)
VALUES ((SELECT id FROM newid), 888, 1),
((SELECT id FROM newid), 999, 2)
RETURNING *
)
SELECT * FROM sold AS s
JOIN products AS p ON p.id=s.prod
JOIN invoices AS i ON i.id=s.invoiceid;