Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于键自动连接SQL表_Sql_Sql Server_Database_Sql Server 2008 - Fatal编程技术网

基于键自动连接SQL表

基于键自动连接SQL表,sql,sql-server,database,sql-server-2008,Sql,Sql Server,Database,Sql Server 2008,是否有一种方法可以自动连接具有主到外部关系的表,而不是指定对这些值的连接?如果您的意思是可以在查询时编写一个不需要on子句的连接,则否 在SQL Server中没有办法做到这一点。彻底的答案是否定的-我所知道的任何RDBMS都不会允许您在ON子句中不指定列以非笛卡尔方式连接两个表,但这可能无关紧要 …因为现在通常多层应用程序都是使用数据访问库构建的,这些库考虑了数据库中定义的关系。选择实体框架之类的东西,如果数据库已经存在,那么您可以从中在EF中构建一个上下文,它将生成一组遵循事物前端代码端关系

是否有一种方法可以自动连接具有主到外部关系的表,而不是指定对这些值的连接?

如果您的意思是可以在查询时编写一个不需要on子句的连接,则否


在SQL Server中没有办法做到这一点。

彻底的答案是否定的-我所知道的任何RDBMS都不会允许您在ON子句中不指定列以非笛卡尔方式连接两个表,但这可能无关紧要

…因为现在通常多层应用程序都是使用数据访问库构建的,这些库考虑了数据库中定义的关系。选择实体框架之类的东西,如果数据库已经存在,那么您可以从中在EF中构建一个上下文,它将生成一组遵循事物前端代码端关系的对象

从技术上讲,你永远不会自己写一个ON子句,因为如果你对EF说了这样的话:

context.Customers.Find(c => c.id = 1) //this finds a customer
  .Orders //this gets all the customer's orders
    .Where(o => o.date> DateTIme.UtcNow.AddMonths(-1)); //this filters the orders
你已经收到了客户id 1在上个月提出的所有订单,而你自己却没有写一个条款。。。EF已经在幕后编写了它,但出于您问题的精神,即存在按关系关联的表,我们使用了一个框架,该框架使用该关系关联数据,以达到前端的目的。。如果您不喜欢自己写子句,您只需使用数据访问库即可:


可以肯定的是,对于您选择的前端语言,将会有一些类似的ORM/映射/数据访问库-我刚刚选择了C中的EF,因为我知道这是一个问题。如果你在搜索出有什么,谷歌搜索{语言选择}ORM如果你使用的是OO语言-你提到的python,。SQLAlchemy似乎很流行,但请注意,答案并不是推荐特定的软件

您的意思是您想从自动连接b中编写类似SELECT*的内容,数据库将使用a和b之间已定义的关系来创建连接?我能想到的最接近于oracle的自然联接,它自动联接名称相同的列上的表。请不要在sun下的每个RDBMS上都添加问题,如果是关于特定RDBMS的问题,您可以编写一个脚本来解析表约束并派生候选键/外键关系,然后在此基础上动态构建联接。@CaiusJard在将我的数据迁移到oracle之外,这将无法正常工作,oracle版本不使用定义的关系,它只查看列名。。据我所知,没有任何RDBMS使用定义的relationship@brddawg我的方法行得通,您不需要迁移任何数据为了国际社会的利益,作为一个糟糕的学究,这个答案不是100%正确的,因为SQL server支持交叉连接和非ansi SELECT*从a、b中选择连接,但是没有关于条款:我在写作时想到了这一点,但我认为在问题的上下文中,意思已经足够清楚了谢谢你-这确实回答了我的问题,还有一点关于如何解决的指导。我试图在我的原始问题中添加一个python标记,以找到更接近我的应用程序的东西。话虽如此,我不能在不测试自己的情况下将其标记为答案,我也没有任何东西可以这样做。