2012-01-30 39 views
5

我喜歡用一個SELECT上可能包含一些字段的表不存在的,但也許不是。如果不是,則可以將該值返回爲NULL,如JOIN LEFT爲不存在的行所做的那樣。MySQL的選擇爲NULL字段如果表

例如,這樣的僞SQL:

SELECT id, email IF EXISTS, name, address FROM users; 

不應該對錶「用戶」的錯誤運行沒有「郵件」字段,但返回的電子郵件= NULL即可。

+5

爲什麼你不知道表的結構? – MMM 2012-01-30 11:03:24

+0

這可能會有所幫助:http://stackoverflow.com/questions/5448518/query-to-check-if-field-exists-and-then-return-the-result-set – 2012-01-30 11:19:55

+0

我可以得到一個表的結構與其他的SQL語句,但這是複雜和昂貴的。另一方面,'SELECT *'將輸出所有現有的列,而不需要知道之前有哪些列。所以我喜歡在沒有事先額外查詢的情況下獲得這種便利。 – dronus 2012-02-16 17:18:20

回答

2

你想要什麼可以純SQL來完成。

從本質上講,你要SQL可以有條件選擇可能不存在的列。這樣的SQL無法解析 - 所有選中的列必須存在或查詢將無效。

但是你可以做到這一點是通過查詢目錄表來檢查你連接到數據庫的架構,並動態地構建你的基於SQL的應用程序代碼。

這種查詢可以幫助您的應用程序代碼來構建查詢:

select COLUMN_NAME 
from INFORMATION_SCHEMA.COLUMNS 
where TABLE_NAME = 'users' 
and TABLE_SCHEMA = 'YOUR-DB-NAME';