SQL查询-来自字段的表

SQL查询-来自字段的表,sql,dynamic-sql,Sql,Dynamic Sql,这就是我的处境。举例来说,我有不同的表格: Name | Phone John 123 Mick 233 表A Name | Phone John 123 Mick 233 表B Name | Phone John 123 Mick 233 Department | Position IT xxx HR

这就是我的处境。举例来说,我有不同的表格:

Name | Phone              
John   123   
Mick   233
表A

Name | Phone              
John   123   
Mick   233
表B

Name | Phone              
John   123   
Mick   233
Department | Position          
IT            xxx   
HR            yyy
Source | Field  
TABLE A    Name   
TABLE B    Department
下一个配置表通过web动态创建:

Name | Phone              
John   123   
Mick   233
表C

Name | Phone              
John   123   
Mick   233
Department | Position          
IT            xxx   
HR            yyy
Source | Field  
TABLE A    Name   
TABLE B    Department
当我运行应用程序时,我读取表C,我需要生成数据。 在这种情况下,我需要列出表A中的所有名称和表B中的所有部门

Name | Phone              
John   123   
Mick   233
我怎么能对此提出质疑?我希望有人能帮助我

Name | Phone              
John   123   
Mick   233

干杯

如果必须在sql中执行此操作(如果不能信任表C的内容,我不建议这样做),则需要构造一个包含sql查询的变量,然后动态执行该sql查询。如何做到这一点完全取决于您的DBMS。MySQL中的一个示例(假设表C只有一行):

Name | Phone              
John   123   
Mick   233
 select ta.Name, tb.Department 
 from TABLEA ta, TABLEB  tb
SQL Server语法:

Name | Phone              
John   123   
Mick   233
DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO
由于表C肯定会有不止一行,您必须遍历表C。这可以通过游标来完成,确切的细节将取决于您的DBMS

Name | Phone              
John   123   
Mick   233

重要的是,请注意,如果您声明表C是从web创建的,那么这是非常危险的。您无法保证字段和源字段中有什么内容:任何稍有sql知识的人都可能用sql注入攻击来填充它们。您可能需要做的是通过安全参数化的数据库元查询安全地验证表C的内容是否为实际的表/列。

如果必须在sql中执行此操作(如果您不能信任表C的内容,我不建议这样做),则需要构造一个包含sql查询的变量,然后动态执行该sql查询。如何做到这一点完全取决于您的DBMS。MySQL中的一个示例(假设表C只有一行):

Name | Phone              
John   123   
Mick   233
SQL Server语法:

Name | Phone              
John   123   
Mick   233
DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO
由于表C肯定会有不止一行,您必须遍历表C。这可以通过游标来完成,确切的细节将取决于您的DBMS

Name | Phone              
John   123   
Mick   233

重要的是,请注意,如果您声明表C是从web创建的,那么这是非常危险的。您无法保证字段和源字段中有什么内容:任何稍有sql知识的人都可能用sql注入攻击来填充它们。您可能需要做的是通过安全参数化的数据库元查询安全地验证表C的内容是否为实际的表/列。

那么您希望查询创建表C,以便它列出表a中的名称和表B中的部门?如果我理解正确,您将需要一些字段来关联表A和表B(如员工ID或其他)。如果您已经有了表C,那么您的问题已经解决了,因为它既有名称也有部门,对吗?您说您从表C中读取,这使它看起来好像已经创建好了?欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您使用什么数据库管理系统。SQL Server、Oracle、MySQL@法布里西奥:在本例中,您是否希望生成表a中所有名称的列表,然后是表B中所有部门的列表?或者你希望以某种方式将它们联系起来——如果是,如何联系呢?洛根,表C是通过网络创建的。创建后,我需要查询该表并获取信息。例如,如果在表C中我得到“表A |部门”,我需要列出表A中的所有部门。问题是,如何查询表C以访问表A并获取信息?因为这是一个领域。你知道我的意思吗?你想要一个查询来创建表C,这样它就列出了表a中的名称和表B中的部门?如果我理解正确,您将需要一些字段来关联表A和表B(如员工ID或其他)。如果您已经有了表C,那么您的问题已经解决了,因为它既有名称也有部门,对吗?您说您从表C中读取,这使它看起来好像已经创建好了?欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!您使用什么数据库管理系统。SQL Server、Oracle、MySQL@法布里西奥:在本例中,您是否希望生成表a中所有名称的列表,然后是表B中所有部门的列表?或者你希望以某种方式将它们联系起来——如果是,如何联系呢?洛根,表C是通过网络创建的。创建后,我需要查询该表并获取信息。例如,如果在表C中我得到“表A |部门”,我需要列出表A中的所有部门。问题是,如何查询表C以访问表A并获取信息?因为这是一个领域。你知道我的意思吗?欢迎使用StackOverflow:如果你发布代码、XML或数据样本,请在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码样本”按钮(
{}
),以很好地格式化和语法突出显示它!另外:我建议始终使用正确的ANSI连接语法,比如从dbo.table中选择ta.Name,tb.Department内部连接dbo.table tb ON……(或者使用另一个连接,如果合适的话)-不要只列出用逗号分隔的表-这很危险,不清楚您是否真的想要笛卡尔产品(如这里)或者,如果您碰巧忘记了WHERE中的连接条件。。。。just messyWelcome to StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!另外:我建议始终使用正确的ANSI连接语法-类似于从dbo.Tabl选择ta.Name、tb.Department
Name | Phone              
John   123   
Mick   233