标签: outer-apply

使用OUTER APPLY函数时返回的值而不是NULL

使用内联函数时,我得到奇怪的结果.这是代码:

IF EXISTS (
SELECT * FROM sys.objects AS o WHERE name = 'vendor_relation_users'
) DROP FUNCTION dbo.vendor_relation_users;
GO
CREATE FUNCTION [dbo].[vendor_relation_users]
(
    @user_name CHAR(12)
)
RETURNS TABLE
AS
    RETURN (SELECT @user_name AS user_name WHERE @user_name NOT LIKE '06%');
GO

DECLARE @u CHAR(12) = '066BDLER'
SELECT a.user_name, is_v.user_name 
FROM (SELECT @u AS user_name) a
OUTER APPLY [dbo].[vendor_relation_users](@u) AS is_v

SELECT a.user_name, is_v.user_name 
FROM (SELECT @u AS user_name) a
OUTER APPLY (SELECT @u AS user_name WHERE @u NOT LIKE '06%') AS …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server apply sql-server-2014 outer-apply

16
推荐指数
2
解决办法
350
查看次数

父母计数基于多个孩子的配对

在下面的例子中,我试图根据每个酒吧位置的可用性来计算我可以制作的饮料数量.

进一步澄清,如下例所示:基于下图中突出显示的数字; 我知道我只能在6/30/2018制作1玛格丽塔(如果我将物资运到该地点,则在DC或FL中).

数据表的样本

按位置组按饮料分类的库存样本图表

请使用以下代码输入上面的相关数据:

    CREATE TABLE #drinks 
    (
        a_date      DATE,
        loc         NVARCHAR(2),
        parent      NVARCHAR(20),
        line_num    INT,
        child       NVARCHAR(20),
        avail_amt   INT
    );

INSERT INTO #drinks VALUES ('6/26/2018','CA','Long Island','1','Vodka','7');
INSERT INTO #drinks VALUES ('6/27/2018','CA','Long Island','2','Gin','5');
INSERT INTO #drinks VALUES ('6/28/2018','CA','Long Island','3','Rum','26');
INSERT INTO #drinks VALUES ('6/26/2018','DC','Long Island','1','Vodka','15');
INSERT INTO #drinks VALUES ('6/27/2018','DC','Long Island','2','Gin','18');
INSERT INTO #drinks VALUES ('6/28/2018','DC','Long Island','3','Rum','5');
INSERT INTO #drinks VALUES ('6/26/2018','FL','Long Island','1','Vodka','34');
INSERT INTO #drinks VALUES ('6/27/2018','FL','Long Island','2','Gin','14');
INSERT INTO #drinks VALUES ('6/28/2018','FL','Long Island','3','Rum','4');
INSERT INTO #drinks VALUES …
Run Code Online (Sandbox Code Playgroud)

sql sql-server parent-child cross-apply outer-apply

15
推荐指数
1
解决办法
310
查看次数

实体框架和CROSS/OUTER应用

我想为Entity Framework查询创建一些测试用例,这些测试确实生成包含CROSS APPLY或OUTER APPLY运算符的SQL命令.

有人可以显示出现这些SQL查询的典型场景吗?

sql sql-server entity-framework cross-apply outer-apply

10
推荐指数
1
解决办法
8820
查看次数

在哪里使用外涂

主表

x------x--------------------x
| Id   |        Name        |
x------x--------------------x
|  1   |          A         |
|  2   |          B         |
|  3   |          C         |
x------x--------------------x
Run Code Online (Sandbox Code Playgroud)

详情表

x------x--------------------x-------x
| Id   |      PERIOD        |   QTY |
x------x--------------------x-------x
|  1   |   2014-01-13       |   10  |
|  1   |   2014-01-11       |   15  |
|  1   |   2014-01-12       |   20  |
|  2   |   2014-01-06       |   30  |
|  2   |   2014-01-08       |   40  |
x------x--------------------x-------x
Run Code Online (Sandbox Code Playgroud)

LEFT JOINOUTER APPLY使用时得到相同的结果.

LEFT JOIN

SELECT …
Run Code Online (Sandbox Code Playgroud)

sql-server left-join sql-server-2008 outer-apply

10
推荐指数
1
解决办法
6338
查看次数

创建笛卡尔积时,CROSS APPLY和OUTER APPLY之间有什么区别吗?

当两个表之间创建一个笛卡尔积,有什么区别CROSS APPLYOUTER APPLY

这似乎是一个愚蠢的问题,因为没有表之间表达的关系,右手表不能不满足关系,但我尊重我不知道的.

当我通过简单的测试设置查看执行计划时,它们是相同的[两个索引寻求进入嵌套循环(内部联接)],但简单的测试设置可能具有欺骗性.

这是我的意思的一个例子(SQL Fiddle).设置:

CREATE TABLE dbo.First (
    Id      INT IDENTITY(1, 1) PRIMARY KEY,
    Name    NVARCHAR(100)
);
GO
DECLARE @n INT = 1;
WHILE @n < 10000
BEGIN
    INSERT INTO dbo.First (Name) VALUES ('First' + CONVERT(NVARCHAR(100), @n));
    SET @n = @n + 1;
END
GO
CREATE INDEX IX__First__Name ON dbo.First(Name);
GO
CREATE TABLE dbo.Second (
    Id      INT IDENTITY(1, 1) PRIMARY KEY,
    Name    NVARCHAR(100)
);
GO
DECLARE @n INT = 1;
WHILE …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server cross-apply outer-apply

5
推荐指数
1
解决办法
620
查看次数

Oracle 中的 OUTER APPLY 是否有其他选择?

在以下示例中,我将tbA.ID传递给tbC查询。在这种情况下,我使用了 SqlServer 的 OUTER APPLY 运算符。

SELECT 
  ...
FROM (SELECT ID FROM TableA ...) tbA
OUTER APPLY (SELECT ... FROM TableB tbB WHERE tbA.ID = tbB.ID) tbC
...
Run Code Online (Sandbox Code Playgroud)

在 Oracle 中,我们没有 OUTER APPLY 运算符。那么,如何在不修改查询结构的情况下将值 (tbA.ID) 从左侧查询传递到连接的右侧查询 (tbC)?

Oracle 中的 OUTER APPLY 是否有其他选择?

sql-server oracle outer-apply

5
推荐指数
1
解决办法
9216
查看次数

OUTER在没有子查询的情况下应用

我通过文章去约CROSS APPLY,并OUTER APPLY在SQL Server中.以下表格用于说明两者.

员工表:

EmployeeID  FirstName   LastName    DepartmentID

1           Orlando     Gee         1
2           Keith       Harris      2
3           Donna       Carreras    3
4           Janet       Gates       3
Run Code Online (Sandbox Code Playgroud)

部门表:

DepartmentID    Name
1               Engineering
2               Administration
3               Sales
4               Marketing
5               Finance
Run Code Online (Sandbox Code Playgroud)

我明白这OUTER APPLY是类似于LEFT OUTER JOIN.但当我OUTER APPLY在表之间应用如下,

select * from Department e
outer apply
Employee d
where d.DepartmentID = e.DepartmentID
Run Code Online (Sandbox Code Playgroud)

我得到了以下结果(与INNER JOIN结果相同)

DepartmentID    Name           EmployeeID   FirstName   LastName    DepartmentID
1               Engineering     1           Orlando …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server join sql-server-2012 outer-apply

4
推荐指数
1
解决办法
1479
查看次数