Duplication

如何在不使用 UNION ALL 或臨時表的情況下顯示每個儲存行兩次?

  • May 6, 2021

名為 的相關表emp包含以下數據:

CREATE TEMPORARY TABLE emp AS
SELECT * FROM ( VALUES (1,'A'), (2,'B'), (3,'C') );

ID  Name
--  ----
1    A
2    B
3    C

數據操作操作的輸出或結果集應如下所示:

ID  Name 
--  ----
1    A
1    A 
2    B
2    B
3    C
3    C

要求

輸出必須符合以下條件:

  • 不使用與使用的 SELECT 語句關聯的 UNION ALL 運算符
  • 不使用臨時表
  • 不對現有表使用 UPDATE 操作

注意:這個場景是面試官向我提出的。

SELECT ta.id, ta.name
FROM emp ta 
CROSS JOIN ( VALUES (1), (2) ) tb (id) ;

一種方法是

SELECT COALESCE(a.id, b.id) AS id,
      COALESCE(a.name, b.name) AS name
FROM emp a 
    FULL OUTER JOIN emp b ON 1=0
ORDER BY id;

引用自:https://dba.stackexchange.com/questions/157138