2013-04-15 70 views
0

表名:看
字段名:查找
示例字段名值:Country.CountryCode
MySQL的動態選擇

同時使選擇內表「看」我應該動態拆分對字段名「查找」的值並獲取第一個值作爲Tablename和第二個值作爲Fieldname做一個動態選擇。我有拆分功能的問題是如何使其在案件陳述中工作,或者也許有人有一個替代解決方案。目前我有這顯然不工作

SELECT l.Id, 
    case when l.lookup is not null then 
     SELECT t.Id 
     FROM (SPLIT_STR(l.LOOKUP,'.',1)) AS t 
     WHERE t.(SPLIT_STR(l.LOOKUP,'.',2)) = l.attValue 
     LIMIT 1 
    END AS attValue 
FROM look as l 

回答

0

不要相信有可能從字段拿起表名稱。但是,建議您的數據庫設計存在問題。

上一個類似的問題: -

MYSQL query using variable as table name in LEFT JOIN

如果有數量有限的相關表/場的加入對,你知道他們都在提前,然後像下面可能做到這一點: -

SELECT l.Id, 
CASE 
    WHEN SPLIT_STR(l.LOOKUP,'.',1) = 'tableA' THEN tableA.Id 
    WHEN SPLIT_STR(l.LOOKUP,'.',1) = 'tableB' THEN tableB.Id 
    WHEN SPLIT_STR(l.LOOKUP,'.',1) = 'tableC' THEN tableC.Id 
    WHEN SPLIT_STR(l.LOOKUP,'.',1) = 'tableD' THEN tableD.Id 
    ELSE NULL 
END AS SubId 
FROM look as l 
LEFT OUTER JOIN tableA ON tableA.ColA = l.attValue 
LEFT OUTER JOIN tableB ON tableA.ColB = l.attValue 
LEFT OUTER JOIN tableC ON tableA.ColC = l.attValue 
LEFT OUTER JOIN tableD ON tableA.ColD = l.attValue 

也就是說,連接每個可能的子表並使用CASE從所需的字段中返回字段。

但是如果你不這樣做,那麼我會建議儘早重新設計數據庫。