【问题标题】:H2 parameterize a table of temporary values in a joinH2 参数化连接中的临时值表
【发布时间】:2016-06-10 10:48:19
【问题描述】:

在 PostgreSQL 中,我有以下查询来验证是否存在具有所需字段组合的行:

SELECT * FROM data 
RIGHT JOIN (VALUES (2,2),(4,6)) AS t (o,p) ON p = set1_value AND o = set2_value 
where id is null;

这会返回 VALUES 列表中在 data 表中找不到的所有组合。

H2 为此引发语法错误:t([*]o,p)

而且我看不出有什么办法。我已经尝试在 postgresql 兼容性中启动 H2,但没有成功。

还有其他方法可以实现吗?

我不知道应该引用语法的AS t(o,p) 部分,所以我无法搜索该术语。看起来像一个参数化的临时表或其他东西,但没有找到任何答案。

【问题讨论】:

  • AS t(o,p) 是派生表的表别名。而values (...) 部分称为“行构造函数”(您从insert 语句中知道这一点)

标签: sql postgresql h2


【解决方案1】:
SELECT * 
FROM data 
RIGHT JOIN 
( 
   select 2 as o, 2 as p
   union all
   select 4, 6
) as t ON p = set1_value AND o = set2_value 
where id is null;

【讨论】:

  • 问题中的查询标准SQL,但你查询不是,因为根据标准FROMSELECT语句中是强制性的。
  • 真的吗?哇。从来没想过。
  • 谢谢。不知道当我让它在几千个可能的预先存在的组合上执行时,它的性能会有多高,但我们会看到
  • 更新:stack depth limit exceeded 是使用大量联合时发生的情况。
  • 如果您有这么多组合,最好将它们放在一个表中并加入该表。
猜你喜欢
  • 1970-01-01
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-23
  • 2017-12-31
  • 1970-01-01
  • 2012-08-20
相关资源
最近更新 更多