标签: where-clause

Linq to Entities中的动态where子句(OR)

这里的帖子中,我学习了如何使用Linq的延迟执行来构建动态查询.但查询实际上是使用WHERE条件的AND连接.

如何使用OR逻辑实现相同的查询?

由于Flags枚举,查询应搜索Username,WindowsUsername两者:

public User GetUser(IdentifierType type, string identifier)
{
    using (var context = contextFactory.Invoke())
    {
        var query = from u in context.Users select u;

        if (type.HasFlag(IdentifierType.Username))
            query = query.Where(u => u.Username == identifier);

        if (type.HasFlag(IdentifierType.Windows))
            query = query.Where(u => u.WindowsUsername == identifier);

        return query.FirstOrDefault();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# linq linq-to-entities entity-framework where-clause

18
推荐指数
1
解决办法
1万
查看次数

在where子句中运行返回boolean的SQL用户定义函数

希望这似乎不太简单.我已经看了这个,但我不太擅长SQL用户定义的函数及其使用,所以我不确定发生了什么.为了告诉我为什么我收到错误,他们想了几点:

在期望条件的上下文中指定的非布尔类型的表达式,在')'附近.

为了这:

UPDATE LMI_Contact
SET Phone = NULL
WHERE dbo.LMI_IsSingleCharacterRepeated(Phone, '0')
Run Code Online (Sandbox Code Playgroud)

可以使用以下方法创建函数:

-- ***this will also find NULL and empty string values***
CREATE FUNCTION LMI_IsSingleCharacterRepeated (@string varchar(max), @char char(1))
RETURNS bit
AS 
BEGIN
    DECLARE @index int
    DECLARE @len int
    DECLARE @currentChar char(1)
    SET @index = 1
    SET @len= LEN(@string)

    WHILE @index <= @len
    BEGIN
        SET @currentChar = SUBSTRING(@string, @index, 1)
        IF @currentChar = @char
            SET @index= @index+ 1
        ELSE
            RETURN 0
    END
    RETURN 1
END;
GO
Run Code Online (Sandbox Code Playgroud)

此函数用于检查字符串是否是任何指定的单个字符,重复.希望有人发现它有用!

sql boolean function where-clause sql-server-2008-r2

18
推荐指数
3
解决办法
4万
查看次数

WHERE子句中的MySQL用户定义变量

我想知道是否有一种方法可以在WHERE子句中使用用户定义的变量,如下例所示:

SELECT id, location, @id := 10 FROM songs WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

此查询运行时没有错误,但无法按预期工作.

mysql where-clause

17
推荐指数
3
解决办法
3万
查看次数

相当于 ON CONFLICT DO NOTHING for UPDATE postgres

如果更新的版本不会违反主键约束,我想更新我的 postgres 数据库中的行。如果可以,我想保持原样。

假设表有主键col1, col2, col3,如果我运行这样的查询:

UPDATE table SET (col1, col2) = ('A', 'B') 
      WHERE col1='D' AND col2='E';
Run Code Online (Sandbox Code Playgroud)

查询将失败,如果存在两个条目,我将收到重复键错误:

'A', 'B', 'C'
'D', 'E', 'C'
Run Code Online (Sandbox Code Playgroud)

col3在现有行和要更新的行之间是相同的。

如果我正在INSERT使用我会使用的行,ON CONFLICT DO NOTHING但我找不到它的实现UPDATE。是否存在等价物?

sql postgresql where-clause sql-update sql-insert

17
推荐指数
2
解决办法
2万
查看次数

Scala相当于Haskell的where-clauses?

是否可以使用类似于Scala中where-clauses的内容?也许有一些我没想到的伎俩?

编辑:

感谢您的所有答案,我们非常感谢.总结一下:局部变量,vals和defs可以用来实现几乎相同的东西.对于惰性求值,可以使用lazy val(带隐式缓存)或函数定义.确保功能纯度留给程序员.

现在只剩下一个问题:是否有一种方法可以在使用它们的表达式之后放置值或函数定义?有时这似乎更清晰.这可以使用类或对象的字段/方法,但它似乎不适用于方法.

到目前为止,答案中没有提到另一件事.where-clause也限制了它们中定义的表达式的范围.我还没有找到在Scala中实现这一目标的方法.

language-features haskell scala where-clause

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

T-SQL Where子句案例语句优化(StoredProc的可选参数)

我一直在争夺这一个.我有一个存储过程,它接受3个用于过滤的参数.如果传入特定值,我想对其进行过滤.如果传入-1,请全部给我.

我试过以下两种方式:

第一种方式:

SELECT field1, field2...etc  
FROM my_view  
WHERE  
parm1 = CASE WHEN @PARM1= -1 THEN parm1  ELSE @PARM1 END  
AND parm2 = CASE WHEN @PARM2 = -1 THEN parm2  ELSE @PARM2 END  
AND parm3 = CASE WHEN @PARM3 = -1 THEN parm3  ELSE @PARM3 END
Run Code Online (Sandbox Code Playgroud)

第二种方式:

SELECT field1, field2...etc  
FROM my_view  
WHERE  
(@PARM1 = -1 OR parm1 = @PARM1)  
AND (@PARM2 = -1 OR parm2 = @PARM2)  
AND (@PARM3 = -1 OR parm3 = @PARM3)  
Run Code Online (Sandbox Code Playgroud)

我读到某处,第二种方式会短路,如果是真的话,永远不会评估第二种方式.我的DBA说它强制进行表扫描.我还没有验证这一点,但在某些情况下似乎运行速度较慢.

此视图选择的主表有大约150万条记录,并且视图继续加入大约15个其他表以收集大量其他信息.

这两种方法都很慢......把我从瞬间带到2-40秒的任何地方,这在我的情况下是完全不可接受的.

是否有更好的方法不涉及将其分解为特定vs …

t-sql sql-server case query-optimization where-clause

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

忽略Hibernate @Where注释

我有一个实体,它与另一个用@Where注释的实体有关联,就像这样

public class EntityA {

    @OneToMany
    @Where(...)
    private List<EntityB> entityBList;

}
Run Code Online (Sandbox Code Playgroud)

最近不可避免的事情发生了,我需要加载不符合@Where子句的EntityB.我可以删除@Where注释,但它被大量使用,所以理想情况下我不想这样做.除了手动加载EntityB的列表,还有另一个查询,我的选择是什么?我可以告诉Hibernate忽略@Where注释吗?

annotations hibernate where-clause

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

为什么在视图外部放置WHERE子句会产生糟糕的性能

假设您有一个观点:

CREATE VIEW dbo.v_SomeJoinedTables AS
SELECT
    a.date,
    a.Col1,
    b.Col2,
    DENSE_RANK() 
      OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b on a.date = b.date
Run Code Online (Sandbox Code Playgroud)

我发现了以下的表现:

SELECT *
FROM v_SomeJoinedTables
WHERE date > '2011-01-01'
Run Code Online (Sandbox Code Playgroud)

比...差很多

SELECT *, 
   DENSE_RANK() 
     OVER(PARTITION BY a.date, a.Col2 ORDER BY a.Col3) as Something
FROM a JOIN b ON a.date = b.date
WHERE a.date > '2011-01-01'
Run Code Online (Sandbox Code Playgroud)

我很惊讶这两个语句的查询计划不一样.

我也尝试使用内联表值函数,但查询仍然比我复制和粘贴视图逻辑的代码长100-1000倍.

有任何想法吗?

t-sql sql-server-2005 where-clause sql-execution-plan

16
推荐指数
1
解决办法
8162
查看次数

在Haskell中,在处理守卫时where子句的范围是什么?

我知道他们没有跨越模式匹配(即你需要为每个模式重写'where'子句),但是范围如何适用于守卫?

这有用吗?

myFunction x1 x2
    | x1 > x2 = addOne x1
    | x1 < x2 = addOne x2
    | otherwise = x1
        where addOne = (1+)
Run Code Online (Sandbox Code Playgroud)

或者应该是这样吗?

myFunction x1 x2
    | x1 > x2 = addOne x1
        where addOne = (1+)
    | x1 < x2 = addOne x2
        where addOne = (1+)
    | otherwise = x1
Run Code Online (Sandbox Code Playgroud)

haskell scope pattern-matching where-clause

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

MYSQL在'WHERE'子句中使用'LIKE'来搜索子查询

你会如何使用'LIKE'来搜索子查询?

我试过这样做,但不起作用:

SELECT *
FROM mytable
WHERE name
    LIKE '%
        (SELECT name FROM myothertable)
        %'
Run Code Online (Sandbox Code Playgroud)

到目前为止我有这个:

SELECT * FROM t1
WHERE t1.name IN (SELECT t2.name FROM t2)
AND (t1.title IN (SELECT t2.title FROM t2)
    OR t1.surname IN (SELECT t2.surname FROM t2))
Run Code Online (Sandbox Code Playgroud)

它工作正常,因为它返回完全匹配,但它似乎没有返回我的其他相似的记录,所以我也想检查:

t1.title LIKE'%t2.title%'和t1.surname LIKE' %t2.surname%'

我该怎么做?

mysql sql subquery where-clause sql-like

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