这是我的情况。我有不同的表格,例如:
表A
Name | Phone
John 123
Mick 233
表B
Department | Position
IT xxx
HR yyy
下一个配置表是通过web动态创建的:
表C
Source | Field
TABLE A Name
TABLE B Department
当我运行应用程序时,我读了表C,我需要生成数据。 在这种情况下,我需要列出表A中的所有名称和表B中的所有部门。
我该如何查询?我希望有人可以帮助我。
干杯!
答案 0 :(得分:0)
如果必须在sql中执行此操作 - 如果您不能信任TABLE C的内容,我不建议这样做 - 那么您将需要构造一个包含sql查询的变量,然后动态执行该sql查询。如何做到这完全取决于您的DBMS。 MySQL中的一个例子(假设TABLE C只有一行):
SELECT @sql:=CONCAT("SELECT ",field," FROM ",source) FROM TABLE_C;
PREPARE s1 FROM @sql;
EXECUTE s1;
SQL Server语法:
DECLARE @sql nvarchar(max)
SELECT @sql = "SELECT " + field + " FROM " + source FROM TABLE_C
EXEC sp_executesql @sql
GO
由于TABLE C肯定会有多行,因此您必须遍历TABLE C.这可以使用CURSOR完成,并且具体细节将取决于您的DBMS。
重要的是,请注意,如果您声明表C是从Web创建的,那么这非常危险。你无法保证FIELD和SOURCE字段中的内容:任何具有一点SQL知识的人都可以填充sql注入攻击。您可能需要做的是通过安全参数化的数据库元查询安全地验证TABLE C的内容是实际的表/列。
答案 1 :(得分:-1)
select ta.Name, tb.Department
from TABLEA ta, TABLEB tb