Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 server 规划WHERE子句。@stakx我刚刚添加了一些附加信息(在答案的末尾),感谢这个例子,并确认DISTINCT确实会使所有三个查询返回相同的结果。关于为什么查询优化器不更智能,我故意避免这样问这个问题,因为答案应该是“因为它不是”。(正如Eric Lipp_Sql Server_Tsql_Inner Join - Fatal编程技术网

Sql server 规划WHERE子句。@stakx我刚刚添加了一些附加信息(在答案的末尾),感谢这个例子,并确认DISTINCT确实会使所有三个查询返回相同的结果。关于为什么查询优化器不更智能,我故意避免这样问这个问题,因为答案应该是“因为它不是”。(正如Eric Lipp

Sql server 规划WHERE子句。@stakx我刚刚添加了一些附加信息(在答案的末尾),感谢这个例子,并确认DISTINCT确实会使所有三个查询返回相同的结果。关于为什么查询优化器不更智能,我故意避免这样问这个问题,因为答案应该是“因为它不是”。(正如Eric Lipp,sql-server,tsql,inner-join,Sql Server,Tsql,Inner Join,规划WHERE子句。@stakx我刚刚添加了一些附加信息(在答案的末尾),感谢这个例子,并确认DISTINCT确实会使所有三个查询返回相同的结果。关于为什么查询优化器不更智能,我故意避免这样问这个问题,因为答案应该是“因为它不是”。(正如Eric Lippert喜欢指出的关于C语言,特性不是默认实现的,也就是说,除非经过深思熟虑来实现它们。)我想换个角度问会更有价值,也就是说,如果有理由证明这种行为是有道理的。 CREATE TABLE y (Id INT NOT NULL PRIMARY K


规划
WHERE
子句。@stakx我刚刚添加了一些附加信息(在答案的末尾),感谢这个例子,并确认
DISTINCT
确实会使所有三个查询返回相同的结果。关于为什么查询优化器不更智能,我故意避免这样问这个问题,因为答案应该是“因为它不是”。(正如Eric Lippert喜欢指出的关于C语言,特性不是默认实现的,也就是说,除非经过深思熟虑来实现它们。)我想换个角度问会更有价值,也就是说,如果有理由证明这种行为是有道理的。
CREATE TABLE y (Id  INT NOT NULL PRIMARY KEY      );
CREATE TABLE x (YId INT NOT NULL REFERENCES y (Id));
DECLARE @YId INT = …;
/* 1: */  SELECT x.* FROM x                              WHERE x.YId = @YId;
/* 2: */  SELECT x.* FROM x INNER JOIN y ON                    x.YId = @YId;
/* 3: */  SELECT x.* FROM x INNER JOIN y ON x.YId = y.Id WHERE y.Id  = @YId;
<joined_table> ::= 
{
    <table_source> <join_type> <table_source> ON <search_condition> 
    | <table_source> CROSS JOIN <table_source> 
    | left_table_source { CROSS | OUTER } APPLY right_table_source 
    | [ ( ] <joined_table> [ ) ] 
}
<join_type> ::= 
    [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]
    JOIN
SELECT
  U.UserName, P.PrivilegeName, P.Status
FROM
 dbo.Users U
LEFT JOIN dbo.Privileges P
  ON U.UserID = P.UserID AND P.PrivilegeName = 'EditComment'
SELECT
  U.UserName, P.PrivilegeName, P.Status
FROM
 dbo.Users U
LEFT JOIN (SELECT UserID, Status FROM dbo.Privileges WHERE P.PrivilegeName = 'EditComment') P
  ON U.UserID = P.UserID
SELECT
  U.UserName, P.PrivilegeName, P.Status
FROM
 dbo.Users U
LEFT JOIN dbo.Privileges P
  ON U.UserID = P.UserID
WHERE
  P.PrivilegeName = 'EditComment'
/* 4: */ SELECT x.* FROM x INNER JOIN y ON                    1=1;
/* 5: */ SELECT x.* FROM x CROSS JOIN y
/* 6: */ SELECT x.* FROM x CROSS JOIN y WHERE x.YId = @YId
2 / SELECT x.* FROM x INNER JOIN y ON                    x.YId = @YId
select
    tx.*
from
    (
        select x.* from x where x.YId = @YId
    ) tx
    cross join y
declare @ty table (Id int not null primary key)
declare @tx table (Id Char(1) not null primary key, yId int not null)

insert into @ty values (1) ,(2), (3)
insert into @tx values ('A', 1), ('B', 1), ('C', 2)

declare @YId int = 1

SELECT x.* FROM @tx x                             WHERE x.YId = @YId
SELECT x.* FROM @tx x INNER JOIN @ty y ON   x.yId = @YId
SELECT x.* FROM @tx x INNER JOIN @ty y ON x.YId = y.Id WHERE y.Id  = @YId
A   1
B   1

A   1
A   1
A   1
B   1
B   1
B   1

A   1
B   1
insert into y values(1),(2);
insert into x values(1),(2);
YID
1
1