如何在一个PostgreSQL查询中使用多个WITH语句?

格雷格:

我想使用WITH语句“声明”什么是有效的多个TEMP表。我尝试执行的查询大致如下:

WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)

WITH table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)

SELECT * FROM table_1
WHERE date IN table_2

我已经阅读了PostgreSQL文档并研究了使用多条WITH语句,但是找不到答案。

马特:

根据其他注释,第二个公共表表达式[CTE]前面带有逗号而不是WITH语句,因此

WITH cte1 AS (SELECT...)
, cte2 AS (SELECT...)
SELECT *
FROM
    cte1 c1
    INNER JOIN cte2 c2
    ON ........

就您的实际查询而言,此语法应在PostgreSql,Oracle和sql-server中起作用,那么以后通常您将WITH使用分号(;WTIH)进行操作,但这是因为通常sql-server伙计们(包括我自己)不会结束在定义CTE之前需要结束的先前语句...

但是请注意,关于WHERE语句,您还有第二个语法问题WHERE date IN table_2无效,因为您从未实际引用过table_2中的值/列。我喜欢INNER JOININ或者Exists所以这里应该有一个工作的语法JOIN

WITH table_1 AS (
SELECT GENERATE_SERIES('2012-06-29', '2012-07-03', '1 day'::INTERVAL) AS date
)

, table_2 AS (
SELECT GENERATE_SERIES('2012-06-30', '2012-07-13', '1 day'::INTERVAL) AS date
)

SELECT * 
FROM
     table_1 t1
     INNER JOIN 
     table_2 t2
     ON t1.date = t2.date
;

如果要保持原样,通常EXISTS比IN更好,但是要使用IN,则需要在实际位置使用SELECT语句。

SELECT * 
FROM
     table_1 t1
WHERE t1.date IN (SELECT date FROM table_2);

当您date可能NULL不愿意使用IN的时候,它非常成问题,JOIN我建议EXISTS如下:

SELECT * 
FROM
     table_1 t1
WHERE EXISTS (SELECT * FROM table_2 t2 WHERE t2.date = t1.date);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift Xcode 6:如何在一个语句中使用多个函数?

如何在squeryl(PostgreSQL)中使用一个序列自动递增多个表?

如何在一个 http 请求中使用节点呈现多个 mysql 查询

如何在一个JPQL查询中使用多个JOIN FETCH

如何在mysql中使用一个SQL查询选择多个静态行

我如何在一个会话中使用节点oracledb插件执行多个SQL查询

如何在一个查询中使用 Concat() & Substring?

如何在一个标签中使用多个“ if”

如何在多个面板中使用一个类

如何在一个ListView中使用多个StreamBuilder

如何在一个模型中使用多个表?

如何在一个事件中使用多个功能?

如何在一个功能中使用多个ID

如何在下一个查询中使用一个查询的结果?

如何在另一个查询中使用一个查询?

如何在 C++ 中使用用户输入在另一个内部创建多个 if 语句?

如何在Bigquery的一个select语句中使用两个group by语句?

如何在一个PL/SQL语句中编写多个SQL查询语句和PL/SQL语句

如何在iOS的sqlite中的一个查询中执行多个select语句?

如何在查询中的一个案例中嵌套多个MAX(...)语句

如何在 Postgresql 的 DO 语句中使用查询参数?

如何在一个删除查询中使用多个表名 - 并非所有表都有数据

如何在SQL Server的一个表中使用查询中的多个值更新列的值?

如何在左连接查询中使用内部连接查询的结果,在一个查询中

如何在一个查询中执行多个查询?

如何在Postgresql查询中使用多个“唯一索引推断”

如何在一个语句中编写多个equalsIgnoreCase()?

SLICK:如何在另一个查询中使用查询结果?

如何在另一个SQL查询中使用SQL查询的结果