如何在Korma的子查询关联中为子查询指定别名?
如何在Korma子查询中指定别名?
我之前也碰到过这个问题!你当前的Korma查询生成的SQL缺少子查询别名,其实只要用Korma提供的korma/as函数就能轻松解决。
问题复现
你当前的查询代码:
(-> (korma/select* table_a) (korma/join (korma/subselect table_b (korma/fields :id (korma/raw "COUNT(*) AS count")) (korma/group :id)) (= :id :id)))
生成的SQL缺少子查询别名,不符合预期:
SELECT * FROM table_a LEFT JOIN (SELECT id, COUNT(*) AS count FROM table_b GROUP BY id) id = id;
解决方案
用korma/as将子查询和指定的别名包裹起来,同时调整join条件明确使用别名字段(避免字段歧义):
(-> (korma/select* table_a) (korma/join (korma/as (korma/subselect table_b (korma/fields :id (korma/raw "COUNT(*) AS count")) (korma/group :id)) :b) (= :b.id :table_a.id)))
生成的目标SQL
这样修改后,Korma会生成你期望的带别名的SQL:
SELECT * FROM table_a LEFT JOIN (SELECT id, COUNT(*) AS count FROM table_b GROUP BY id) AS b ON b.id = table_a.id;
小说明
korma/as是Korma中专门用于给表或子查询指定别名的工具函数,第一个参数是需要设置别名的查询/表,第二个参数是你想要的别名(支持关键字或字符串格式)。另外调整join条件的字段引用,能避免不同表中同名字段导致的SQL解析错误。
内容的提问来源于stack exchange,提问作者Freid001
相关产品推荐
相关产品推荐

