有没有办法动态连接SQL表? 例如,查看提供的表并在主键和外键之间生成连接语句的函数
我在winform listview中有项目
1. TABLE1.NAME
1. TABLE2.AGE
1. TABLE3.ADDRESS
在数据库中,我有3个表:
TABLE1
------
- TBL1_ID
- NAME
TABLE2
------
- TBL_ID2
- TBL1_ID_FK
- AGE
TABLE3
------
- TBL_ID3
- TBL2_ID_FK
- ADDRESS
我想要实现的输出应该如下所示:
SELECT TABLE1.NAME,TABLE2.AGE,TABLE3.ADDRESS FROM TABLE1 JOIN TABLE2 ON TBL1_ID_FK = TBL1_ID JOIN TABLE3 ON TBL2_ID_FK = TBL_ID2
答案 0 :(得分:1)
你可能不想这样做......如果你真的认为你需要这样做,那就把它看作一种方法的想法:
阅读并理解TSQL SELECT语法: https://msdn.microsoft.com/en-US/en-en/library/ms189499.aspx
将您的问题分解为该语法的片段
你需要创建一个select_list,一个table_source,很可能是一个WHERE子句
创建一个代表您的架构的数据结构(如何连接表,以及哪些列在哪个表中)
对于列选择,遍历所有选定的列,并查找它们所在的表。将表选择存储在临时列表中(请记住,列选择还需要保存有关与其他所选列的关联的信息)列...例如,一个人可以是某些商品的买家或卖家,而在这两种情况下,这些记录都存储在同一个表中。单独的列不能保存关于加入哪种方式的足够信息买方或卖方一侧的人员表......)
对于表选择,选择其中一个表作为起点,并从此表开始作为FROM子句的第一个表,遍历所有选定的表,并在模式定义中找到有关如何连接/的所有路径加入它们并保留那些对您的columnselection的关联有效的。沿着路径走,并将所有具有关联连接条件的表添加到from子句中,同时为每个表赋予不同的名称。现在可选地根据表和关联减少连接(每个只需要一对)
更新columselection以引用给予连接表的名称,使用表的关联信息来匹配右列
最后,实际上为所有片段生成文本,并按正确的顺序将它们组合在一起......
正如你所看到的那样,GENERAL解决方案是一项艰苦的工作...如果你可以降低你的期望,特别是在协会方面,你可以大大降低复杂性,但它不适用于所有情况
或使用ORM,可以节省数千小时......
例如,使用EF,您可以使用用户定义的表达式树来投射您想要的结果,EF会为您处理该语句答案 1 :(得分:0)
仅举几例:
LINQ to SQL:https://msdn.microsoft.com/en-us/library/bb425822.aspx
实体框架:http://www.entityframeworktutorial.net/what-is-entityframework.aspx
我使用LINQ to SQL,我很高兴。所以如果你想编码而不是“设计”东西,我会推荐它。
答案 2 :(得分:0)
虽然我认为这是一种不好的做法,但有时您必须动态创建SQL语句。在这种情况下,您将命令创建为字符串,然后使用SQL的EXEC命令运行它。
以下是一个示例(严格来说是SQL Server的SQL语句):
{{1}}