Tenho uma tabela user_issues
com 3 colunas: id
, component_id
e path
e preciso filtrá-la, mas tuplas de component_id
e path
.
Então usei a seguinte consulta para conseguir isso:
SELECT id
FROM user_issues ui
JOIN (VALUES ($1, $2), ($3, $4)) AS v(component_id, path) ON ui.component_id = v.component_id AND ui.path = v.path;
Gostaria de saber se existe uma maneira mais elegante ou eficiente de conseguir isso (em vez de usar a VALUES
cláusula para criar um conjunto de linhas (tuplas)).
Seu original já apresenta o melhor desempenho.
Quanto a "mais elegante" :
Possivelmente até:
Mas eu resistiria à tentação de simplificar com uma
NATURAL
junção. Se um dos nomes de coluna não corresponder, isso degenera em umCROSS JOIN
. O manual:A maneira "mais elegante" realmente depende de como a cadeia alimentar entrega valores de filtro. Se você os obtiver na forma de dois (ou mais) arrays (em uma forma pivotada), desaninhar múltiplos arrays em paralelo será mais elegante:
Ver: