表名:看
FieldName:LookUp
示例fieldname值:Country.CountryCode
在选择内部表'Look'时,我应该动态地拆分字段名'LookUp'的值,并将第一个值作为Tablename,将第二个值作为Fieldname来进行动态选择。我有分离功能,问题是如何使它在case语句中工作,或者可能有人有另一种解决方案。目前我有这个显然不起作用
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 :(得分: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返回所需的字段。
但是,如果你做到这一点,那么我建议你尽早重新设计数据库。