【问题标题】:Use CTE to generate test data in SQL在 SQL 中使用 CTE 生成测试数据
【发布时间】:2020-03-26 18:32:08
【问题描述】:

我正在尝试使用 CTE 为 SQL (postgresql) 中的单元测试生成数据表。

WITH temp1 AS (
SELECT
  ('A', 'A', 'B', 'B') AS grp,
  (1, 2, NULL, 1) AS outcome
)

SELECT * 
FROM temp1

上面的查询生成单行而不是 4 行表,这对我的单元测试很有用。如何生成表格中的 4 行表:

grp.....outcome
A.......1
A.......2
B.......NULL
B.......1

【问题讨论】:

  • 在 CTE 中使用 UNION

标签: sql postgresql select common-table-expression


【解决方案1】:

您可以只使用values() 语法来创建行,如下所示:

with temp1(grp, outcome) as (values ('A', 1), ('A', 2), ('B', null), ('B', 1))
select * from temp1

Demo on DB Fiddle

grp |结果 :-- | ------: 一个 | 1 一个 | 2 乙| 乙| 1

【讨论】:

    【解决方案2】:

    您不需要 CTE。使用UNION ALL,如:

    select 'A' as grp, 1 as outcome
    union all select 'A', 2
    union all select 'B', null
    union all select 'B', 1
    

    【讨论】:

      【解决方案3】:
      WITH temp1 AS (
      SELECT  'A' as grp ,1 as outcome
      UNION 
      SELECT  'A', 2
      UNION
      SELECT 'B',NULL
      UNION 
      SELECT 'B',1
      ) SELECT * FROM temp1
      

      【讨论】:

        猜你喜欢
        • 2013-10-24
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 2020-07-22
        • 2014-09-11
        • 1970-01-01
        • 2015-04-29
        • 1970-01-01
        相关资源
        最近更新 更多