使用子查询sql选择表

时间:2014-05-09 19:45:37

标签: sql sql-server sql-server-2008 dynamic subquery

注意:这适用于SQL Server 2008。

我有一个包含许多列的表,其中两列与此讨论相关:Object和TableID。对象是一个可读的名称。 TableID对应于与Object关联的表,尽管关联的表都以字母T开头,如表T135或表T143所示。

SchemaTable
Object    TableID   /* Object is type varchar, TableID is type int
Form1     135
Form2     143
Form3     321

我想制作一个SQL查询,它将根据Object的值从这些表中选择内容。这是我到目前为止所做的事情(不起作用):

SELECT Col1, Col2
FROM (
    SELECT (T' + CAST(TableID AS VARCHAR))
    FROM SchemaTable
    WHERE Object = 'Form1'
)Tbl_T
WHERE Col1 IS NOT NULL

我可以使用子查询以这种方式选择表吗?如果没有,你还有什么建议以及如何建议?

非常感谢您的帮助。

修改

似乎我的问题或疑问不明确。让我试着解决这个问题。

我可以直接选择表格T135:

SELECT Col1, Col2
FROM T135
WHERE Col1 IS NOT NULL

但我想要做的是根据表Object中的列SchemaTable选择表T135。

你知道吗?我不想从表格SchemaTable中选择值的子表格。我只想抓住TableID(即135)并从所述表中选择内容(即T135)。表T135中没有TableID列。 TableID实际上对应于表的名称。它不被用作其他表中的键或标识。我认为,混淆在于理解我想要实现的目标。

我希望更清楚。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

是的,您可以使用子查询以这种方式选择表。这是另一个例子:

select * from  
(select ndc,client_id,pkg_sz from ABC where pkg_sz=100) dist,  
(select ndc,client_id from XYZ where pkg_sz=500) trns  
where trns.client_id = dist.client_id  
and dist.ndc=trns.ndc;