簡體   English   中英

根據 PostgreSQL 中的條件獲取不同的查詢

[英]Get different query back based on a condition in PostgreSQL

我在使用 sql 時遇到了困難,這可能看起來很愚蠢,但它顯示了我想要實現的目標。

SELECT
   CASE WHEN ( ( SELECT 1 FROM table_1 WHERE = condition ) IS NULL ) THEN
      SELECT 'No result'::varchar
   ELSE
      SELECT
         val_1,
         val_2,
         val_3
      FROM
         table_1
   END;

在我的情況下,空答案不好,我不能只使用子查詢作為主要查詢。 即使我可以,如果兩個表不一樣,我仍然會留下這個問題:

SELECT
   CASE WHEN ( ( SELECT 1 FROM table_1 WHERE = condition ) IS NULL ) THEN
      SELECT 'No result'::varchar
   ELSE
      SELECT
         val_1,
         val_2,
         val_3
      FROM
         table_2    --TABLE REPLACED!
   END;

由於 CASE-WHEN 僅適用於一列,因此擁有 20 個具有相同條件的列將是可怕的。 任何幫助表示贊賞! 謝謝!

所以你想選擇 table_log 並且如果結果不是 NULL 將它顯示給客戶端,如果它是 NULL 顯示一條消息?

我創建了一個假表進行測試。 您正在尋找的是最后一個 SELECT 語句:

DROP TABLE IF EXISTS table_log;

CREATE TEMP TABLE table_log (
    id INTEGER
    ,log_info VARCHAR)
;

INSERT INTO table_log VALUES
    (1, 'test_entry')
;

ANALYZE table_log;

SELECT
  COALESCE(b.log_info, 'No changes done!') AS log_info
FROM
  (SELECT 'Fake-Data') a
  LEFT OUTER JOIN (SELECT * FROM table_log WHERE id = 1) b ON (1=1);

如果給定的 id = 1,你會得到結果,如果它是別的東西(因為它不在測試表中),則給出預制消息。

這是db<>fiddle的鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM