【问题标题】:I try to join two table but another table name is in column of first table. Is it possible to join or is there is an我尝试加入两个表,但另一个表名在第一个表的列中。可以加入还是有
【发布时间】:2020-05-23 11:04:09
【问题描述】:
连接两个表...一个表名也是列名。
SQL
FROM table fs
INNER JOIN fs.tablenamecolumn st
ON fs.t_ID=st.t_ID
where t=1250```
error--
Invalid object name 'fs.tablenamecolumn '.
【问题讨论】:
标签:
mysql
sql
database
inner-join
jointable
【解决方案1】:
编辑:我刚刚意识到这是针对 MySQL,而不是 MSSQL。所以你需要使用准备语句。希望您可以将以下内容作为指南来帮助您。
您需要动态创建 SQL,例如
DECLARE @tablename AS VARCHAR(100)
SELECT @tablename = tablnamecolumn FROM [yourtable]
DECLARE @query AS NVARCHAR(MAX)
SET @query =
'SELECT *
FROM [yourtable]
INNER JOIN ' + @tablename + '
ON fs.t_ID=st.t_ID
WHERE t=1250'
EXEC sp_executesql @query
【解决方案2】:
不是真的。使用动态 SQL 甚至很难做到这一点,因为名称可能会因行而异。
您应该重新审视您的数据模型。您正在做的事情可能完全没有必要。
如果有一组有限的表,可以使用left join:
FROM table fs LEFT JOIN
table1 t1
ON fs.t_ID = t1.t_ID AND
fs.tablenamecolumn = 'table1' LEFT JOIN
table2 t2
ON fs.t_ID = t2.t_ID AND
fs.tablenamecolumn = 'table2' LEFT JOIN
. . .
WHERE fs.t = 1250
【解决方案3】:
在 where 条件下,在列上给出表别名
别名将在您要过滤的表上。
select FROM table fs
INNER JOIN fs.tablenamecolumn st
ON fs.t_ID=st.t_ID
where fs.t=1250