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