恐怕答案是直「不」,但我不知道是否有可能做一些事情,如在MySQL以下幾點:是否可以動態地選擇MYSQL中的列名是N個已知值中的一個的列名?
SELECT (title||label||name) FROM table
即選擇一列,可以被稱爲title
,label
或name
,從table
。
原因是:查詢將動態生成,其中table
是已知的,但(由於我無法控制的原因),其他表中沒有一致的命名約定。
恐怕答案是直「不」,但我不知道是否有可能做一些事情,如在MySQL以下幾點:是否可以動態地選擇MYSQL中的列名是N個已知值中的一個的列名?
SELECT (title||label||name) FROM table
即選擇一列,可以被稱爲title
,label
或name
,從table
。
原因是:查詢將動態生成,其中table
是已知的,但(由於我無法控制的原因),其他表中沒有一致的命名約定。
它的確有用。
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='YOUR_TABLE_NAME' AND COLUMN_NAME IN ('name', 'label', 'title') into @colname;
SET @table = 'YOUR_TABLE_NAME';
SET @query = CONCAT('SELECT ',@colname,' FROM ', @table);
PREPARE stmt FROM @query;
EXECUTE stmt;
是的,它的確有訣竅!我選擇了邏輯上的改變,但會接受這個答案,因爲它回答了手頭的問題。謝謝。 – HelloPablo
我@Strawberry's comment完全同意「這聽起來像是一場災難在製作」 —這是一個非常糟糕的設計策略,我強烈建議尋找一個替代的解決方案。然而,這是一個有趣的挑戰…這是我的解決方案:
SELECT COALESCE(title,label,name) col FROM `table` NATURAL LEFT JOIN (
SELECT NULL title, NULL label, NULL name
) t WHERE COALESCE(title,label,name) IS NOT NULL
請參閱sqlfiddle。
請注意,如果記錄數據是NULL
,則不會返回任何記錄。
我也同意 - 這是一個可怕的混亂!這是一個客戶的項目,我負責'修復'它。 * facepalm * – HelloPablo
因此,它將它們選爲NULL,那麼如果碰巧存在,它會替換NULL值?整齊。 –
你怎麼知道你想要哪個領域?或者你只是想選擇哪一個存在?可能這個幫助:http://stackoverflow.com/a/9086503 –
我想選擇哪裏存在(如果存在多個,那麼第一個匹配),或者如果不存在,優雅地失敗。我想我可以做一個'DESCRIBE'並在PHP中檢查這種方式,但更喜歡單個查詢。 – HelloPablo
如何生成查詢?你能做一個查詢表嗎?像'if(表==='書籍'){field ='title'}'? –