我能想到的一种方法是将参数作为 JSON 字符串传递,然后你可以有一个参数:
SELECT id
FROM songs
WHERE (song, artist, record_label)
in (select item ->> 'song',
item ->> 'artist',
item ->> 'record_label'
from jsonb_array_elements(cast(? as jsonb)) as p(item)
);
该参数将是一个字符串传递PreparedStatement.setString()
.
对于您的示例查询,例如
[
{"song": "Blackbird", "artist": "The Beatles", "record_label": "Apple Records"},
{"song": "Wonderwall", "artist": "Oasis", "record_label": "Columbia Records"},
{"song": "Yesterday", "artist": "The Beatles", "record_label": "Apple Records"}
]
不确定性能,但OR
条件通常是性能杀手,因此解析和取消嵌套 JSON 数组的小开销不会产生太大影响。