iT邦幫忙

0

MySQL查詢結果排除特定欄位 並指定值

  • 分享至 

  • xImage

假設我有一張TABLE A

裡面有四個欄位(編號,年份,料號,型號)

我只想要用一條查詢語法查所有欄位 但是年份改為我要的字串

我只會這樣下

SELECT 編號,'Y2020',料號,型號
FROM TABLE A

有辦法下SELECT * FROM TABLE A但是排除特定欄位 並給予指定的值嗎?

因為舉例是四個欄位

但是假設實際有20個欄位

我只能手動SELECT KEY入所有欄位

再請各位指教

謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
一級屠豬士
iT邦大師 1 級 ‧ 2020-02-11 20:36:29
最佳解答
在 MySQL 中要看 table 的資訊,可以用 desc tbl;

例如:

desc itmy191213;
+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| idt   | datetime         | NO   |     | NULL    |                |
| val   | int(11)          | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)


MySQL 沒有 select * except (col ...) 這樣的語法.
但是我們可以自己想辦法加工,用 SQL Command 產生.
就是透過標準的系統schema, information_schema 來產生.
例如上面的table, 我們不需要 idt.

select concat('SELECT ' ,group_concat(column_name)) as cmd
  from information_schema.columns
 where table_schema = 'miku'
   and table_name = 'itmy191213'
   and column_name not in ('idt');

+---------------+
| cmd           |
+---------------+
| SELECT id,val |
+---------------+
看更多先前的回應...收起先前的回應...
Neish iT邦研究生 1 級 ‧ 2020-02-12 09:54:05 檢舉

感謝屠豬士回覆!
這做法太高竿了 平常都用基本的SQL操作而已

不過這方法可行! 確實可以把某欄排除掉
但是如果排除後還要針對特定欄賦予值
另外的加工處理 還是有點小麻煩

你後續就把產生的語法,複製貼上後,再調整使用.

Neish iT邦研究生 1 級 ‧ 2020-02-12 11:01:30 檢舉

我發現一個問題...
SELECT出的結果是我要的SQL語法字串
但是MySQL我可以怎麼直接RUN這段字串?

產生之後就複製貼上.再修改使用啊.
若要再進階就是寫stored procedure.

0

「*」就是代表全部了。

所以只能一個一個key你要的欄位。沒別的方式。

0
舜~
iT邦高手 1 級 ‧ 2020-02-12 08:27:02

有辦法下SELECT * FROM TABLE A但是排除特定欄位 並給予指定的值嗎?

沒有,
替代方式是動態組合sql字串後執行,雖然也是需要給定特定值,好處是這部分可以程式代勞會輕鬆很多,缺點是要執行2次,效能比較低,第一次取出全部欄位名稱,排除不要的欄位組合並成sql後第二次才是真正的取出資料

我要發表回答

立即登入回答