iT邦幫忙

0

PostgreSQL 查詢問題

各位大大不好意思~
想請問一下一個比較冷門的SQL

我最近在使用PostgreSQL的時候

使用了查詢的SQL語法:

SELECT * FROM public.test;

假設說 我這個test資料表裡面有 NAME NUMBER CLASS PHONE.....等資料

我如果想輸出全部的資料但都不顯示 "CLASS" 這個欄位

我該怎麼下語法好呢??

((我查了網路大家都是直接硬尻
SELECT NAME NUMBER PHONE..... FROM public.test;

但假如今天我的欄位很多 只想扣掉其中一個欄位 請問大大們該如何下語法??

小魚 iT邦高手 1 級 ‧ 2017-10-24 12:34:05 檢舉
我覺得這語法怪怪的, 好像少了什麼...
通常會建議把欄位名稱寫出來,
SELECT *效率會比較差,
尤其是資料多的時候.

2 個回答

3
一級屠豬士
iT邦新手 3 級 ‧ 2017-10-24 22:51:17
最佳解答
create table ithelp171024 (
  id int not null
, mclass char(1) not null
, phone char(10) not null
, col1 char(1) not null
, col2 char(1) not null
, col3 char(1) not null
, col4 char(1) not null
);

-- 假設不要 mclass, col3
-- 用SQL Command 產生 SQL Command

SELECT 'SELECT ' || string_agg(column_name, ',')
    || ' FROM'
    || ' ithelp171024;' as gen_sql
  FROM information_schema.columns c
 WHERE table_name = 'ithelp171024'
   AND column_name NOT IN ('mclass', 'col3');
   
                      gen_sql                       
----------------------------------------------------
 SELECT id,phone,col1,col2,col4 FROM ithelp171024;
(1 筆資料列)

時間: 3.000 ms

海綿寶寶那篇,排版是有問題的.另外現在新版的PostgreSQL 有 String_Agg()可以直接用.
所以我寫了個例子,給大家參考一下.
information_schema 是ANSI 定義的標準通用schema,大多數資料庫會作view來對應.
我們就可以利用. || 是 字串(String)連接運算元,PostgreSQL,Oracle都是使用這個.
若是MySQL 可以用 concat()函數來連接;
產生 columns 的使用 GROUP_CONCAT() 來串接.
MySQL的以前我有回答過,當然還是被不長進發問者
沒選最佳解答啦.

屠豬士再現!!!!
我推

謝謝肥龍.

https://ithelp.ithome.com.tw/upload/images/20171025/200928338KsokJEbCq.jpg

chad0621 iT邦新手 5 級 ‧ 2017-11-08 09:19:04 檢舉

感謝屠豬大XD

3
海綿寶寶
iT邦超人 1 級 ‧ 2017-10-24 12:37:29

2008年就有人問過相同問題了
直到現在
答案還是在 2008 年那篇裡
/images/emoticon/emoticon06.gif

因為不會就放著
XD

chad0621 iT邦新手 5 級 ‧ 2017-11-08 09:18:35 檢舉

謝謝大大們!!!
我後來自己也有翻出來寫法惹><

我要發表回答

立即登入回答