不在上下文中使用Where语句

时间:2016-04-30 06:50:55

标签: sql sql-server tsql

目标:

如果输入数据为-10,则不应在函数中使用WHERE语句。

问题:

我不知道在这种情况下如何解决它。您必须使用WHEREnot WHERE,具体取决于您检索的输入数据

信息:

如果您使用-10作为输入数据,则应根据[dbo].[testing]检索所有数据,并且可以检索null[dbo].[testing2]的数据到LEFT JOIN

*代码及其数据是生产阶段的样本。

谢谢!

CREATE TABLE [dbo].[testing](
    [id] [int] NULL,
    [value] [varchar](30) NULL,
    [category] [int] NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[testing2](
    [id] [int] NULL,
    [value] [varchar](30) NULL,
    [category] [int] NULL,
    [test_id] [int] NULL,
    [id_type] [int] NOT NULL
) ON [PRIMARY]

CREATE FUNCTION dbo.testt ( 
    @data int
)
RETURNS TABLE
AS
RETURN 
(
    SELECT 
        a.[id],
        a.[value],
        a.[category],
        b.[id_type]
    FROM [dbo].[testing] a left join [dbo].[testing2] b on a.id = b.[id]
    where b.[id_type] = @data
)

INSERT INTO [test].[dbo].[testing] VALUES 
(1, '', 2), (2, '', 3), (3, 'a', 2), (4, 'a', 2),
(5, 'b', 2), (6, 'b', 2), (7, 'c', 2), (8, 'c', 2),
(9, 'c', 2), (10, 'c', 2);


INSERT INTO [test].[dbo].[testing2] VALUES 
(3, 'a' ,2 ,11 ,1), (4, 'a' ,2 ,11 ,1),
(5, 'a' ,2 ,11 ,0), (6, 'a' ,2 ,11 ,2);

select
    s.[id],
    s.[value],
    s.[category],
    s.[id_type]
from dbo.testt(1) s

2 个答案:

答案 0 :(得分:2)

让你的WHERE子句检查@data是-10还是匹配b。[id_type]。

WHERE (@data = -10) OR (b.[id_type] = @data)

答案 1 :(得分:0)

where b.[id_type] = @data OR @data = -10函数中的testt怎么样?

所以你的功能是:

CREATE FUNCTION dbo.testt ( 
    @data int
)
RETURNS TABLE
AS
RETURN 
(
    SELECT 
        a.[id],
        a.[value],
        a.[category],
        b.[id_type]
    FROM [dbo].[testing] a 
    LEFT JOIN [dbo].[testing2] b on a.id = b.[id]
    WHERE b.[id_type] = @data OR @data = -10
)