SQL 查询 - 来自字段的表
这就是我的情况。我有不同的表,例如:
TABLE A
Name | Phone
John 123
Mick 233
TABLE B
Department | Position
IT xxx
HR yyy
下一个配置表是通过网络动态创建的:
TABLE C
Source | Field
TABLE A Name
TABLE B Department
当我运行应用程序中,我读取了表 C 并且需要生成数据。 在这种情况下,我需要列出表 A 中的所有名称和表 B 中的所有部门。
我该如何查询?我希望有人能帮助我。
干杯!
This is my situation. I have different tables, by example:
TABLE A
Name | Phone
John 123
Mick 233
TABLE B
Department | Position
IT xxx
HR yyy
And the next configuration table is created dynamically via web:
TABLE C
Source | Field
TABLE A Name
TABLE B Department
When I run the application, I read the Table C and I need to generate the data.
In this case, I need to list all the names from TABLE A and all the departments from TABLE B.
How can I query this? I hope somebody can help me.
Cheers!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您必须在 sql 中执行此操作(如果您不能信任 TABLE C 的内容,我不会建议这样做),那么您将需要构造一个包含 sql 查询的变量,然后动态执行该 sql 查询。如何做到这一点完全取决于您的 DBMS。 MySQL 中的一个示例(假设表 C 只有一行):
SQL Server 语法:
由于表 C 肯定有不止一行,因此您必须迭代表 C。这可以通过 CURSOR 来完成,然后再次使用确切的细节取决于您的 DBMS。
重要的是,请注意,如果您声明表 C 是从网络创建的,那么这是非常危险的。您无法保证 FIELD 和 SOURCE 字段中的内容:任何具有一点 SQL 知识的人都可能会利用 sql 注入攻击来填充它们。您可能需要做的是通过安全参数化的数据库元查询安全地验证 TABLE C 的内容是否是实际的表/列。
If you have to do this in sql - which I would not recommend if you can not trust the content of TABLE C - then you will need to construct a variable that contains the sql query, then execute that sql query dynamically. How to do this will entirely depend on your DBMS. An example in MySQL (which assumes that TABLE C has only one row):
SQL Server syntax:
Since TABLE C will certainly have more than one row you will have to iterate through TABLE C. This can be done with a CURSOR, and again the exact details will be dependent on your DBMS.
Importantly, be aware that this is very dangerous if as you state TABLE C is created from the web. You have no guarantee what is in the FIELD and SOURCE fields: they could be filled with a sql injection attack by anyone with a little SQL knowledge. What you may need to do is safely validate that TABLE C's contents are actual tables/columns via safely parameterized database meta-queries.