Query

如果存在,從其他表中選擇

  • May 23, 2021

嗨,我想合併 2 個表,但我不確定表是否退出這是我的查詢:

select  a from table 
union  
select  case when exists(select a from table1) then (select a from  table1)
else (select a from table2) end;

收到

錯誤:錯誤 4840:用作表達式的子查詢返回多行

我需要在子查詢中使用限制 1,但這不是我想要的結果。

你還有其他建議嗎?謝謝

例如,我剛剛在本地環境中創建了它們以進行測試:

表格1

CREATE TABLE public.table1 
(
   a int,
   b varchar(80),
   c int
);


CREATE TABLE public.table
   a int,
   b varchar(80),
   c int
);

原則上這是行不通的,因為您無法檢查表是否存在然後將其加入查詢中。

錯誤是無關的。您正在子選擇中選擇一個值,它會返回多行,因為該表存在。

你可以做的是:

  • 創建臨時表
  • 使用 V_Catalog.table 檢查 table1 是否存在,如果特定列的存在很重要,v_catalog.column
  • 如果存在,則從table1中選擇數據到臨時表中
  • 使用聯合中的臨時表而不是 table1

我不知道如何使用 Vertica,但您可以嘗試使用 If exists like in SQL Server

如果存在 (Select 1 FROM sys.objects Where type = ‘U’ and name in (‘YourTableName1’, ‘YourTableName2’)) Begin Select * From Public.Table1 Union Select * From Public.Table2 End

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