我正在尝试将某些现有代码中的QueryExpression转换为T-SQL select语句。
我遇到以下陈述,我无法理解自然加入的含义:
linkEntity1.JoinOperator = JoinOperator.Natural;
这是否等同于T-SQL中的内部联接?谷歌搜索没有多大帮助。
以下是QueryExpression代码的其余部分:
QueryExpression query = new QueryExpression();
query.EntityName = "showinfo";
ColumnSet columns = new ColumnSet();
columns.Attributes = new String[] { "company" };
query.ColumnSet = columns;
query.Criteria = new FilterExpression();
query.Criteria.FilterOperator = LogicalOperator.And;
ConditionExpression condition1 = new ConditionExpression();
condition1.AttributeName = "company";
condition1.Operator = ConditionOperator.NotNull;
query.Criteria.Conditions = new ConditionExpression[] { condition1 };
LinkEntity linkEntity1 = new LinkEntity();
linkEntity1.JoinOperator = JoinOperator.Natural;
linkEntity1.LinkFromEntityName = "show";
linkEntity1.LinkFromAttributeName = "showid";
linkEntity1.LinkToEntityName = "showintegration";
linkEntity1.LinkToAttributeName = "showcode";
linkEntity1.LinkCriteria = new FilterExpression();
linkEntity1.LinkCriteria.FilterOperator = LogicalOperator.And;
ConditionExpression condition2 = new ConditionExpression();
condition2.AttributeName = "showend";
condition2.Operator = ConditionOperator.Null;
linkEntity1.LinkCriteria.Conditions = new ConditionExpression[] { condition2 };
query.LinkEntities = new LinkEntity[] { linkEntity1 };
答案 0 :(得分:3)
在SQL Server中没有自然连接的等价物,其中表相交是基于RDBMS的列名。
我很高兴,因为它充其量是暧昧的,最坏的是危险的。 JOIN应该是明确的。示例原因:
见
编辑:
根据JoinOperator Enumeration,看起来自然连接意味着“不要在输出中重复列”(就像在MySQL中的USING一样)。
如果我理解这一点(有争议的话),这会产生误导。特别是当我读到“LeftOuter”叙事时......
答案 1 :(得分:1)
自然连接会比较两个具有相同列名的表中的所有列。它等同于内部联接,其中明确列出了匹配列。
答案 2 :(得分:0)
是 - 自然联接是内连接 - 所以你可以写:
select * from tab1, tab2 where tab1.col1 = tab2.col1
作为
select * from tab1 inner join tab2 on tab1.col1 = tab2.col1