我正在寻求将SQL查询(Postgres)转换为Scala Slick代码,以便在我的Play应用程序中使用。
数据看起来像这样:
parent_id | json_column
----------+-----------------------------------------
| [ {"id": "abcde-12345", "data": "..."}
2 | , {"id": "67890-fghij", "data": "..."}
| , {"id": "klmno-00000", "data": "..."} ]
这是我在PostgreSQL中的查询:
SELECT * FROM table1
WHERE id IN (
SELECT id
FROM
table1 t1,
json_array_elements(t1.json_column) e,
json_to_record(e.value) AS r("id" text, data text)
WHERE
"id" = 'abcde-12345'
AND t1.parent_id = 2
);
这找到了我需要的结果; t1中任何在ID为“ abcde-12345”的json_column数组中包含“行”的对象。 “ parent_id”和“ id”将通过查询参数(均为字符串)传递给此查询。
我将如何使用Slick在Scala中编写此查询?
最容易-也许最懒? -方法可能只是使用普通sql ..
sql"""[query]""".as[ (type1,type2..) ]
对变量使用$var
符号。
否则,您可以使用SimpleFunction
映射json调用,但是当它们每行生成多个结果时,我不太确定如何工作。似乎可能会变得复杂。.