标签: where-clause

在SQL/MySQL中,连接语句中"ON"和"WHERE"之间有什么区别?

以下语句给出相同的结果(一个使用on,另一个使用where):

mysql> select * from gifts INNER JOIN sentGifts ON gifts.giftID = sentGifts.giftID;
mysql> select * from gifts INNER JOIN sentGifts WHERE gifts.giftID = sentGifts.giftID;
Run Code Online (Sandbox Code Playgroud)

我只能在左外连接的情况下看到"无与伦比"的案例:(
找出任何人从未发过的礼物)

mysql> select name from gifts LEFT OUTER JOIN sentgifts 
           ON gifts.giftID = sentgifts.giftID 
           WHERE sentgifts.giftID IS NULL;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,它首先使用on,然后where.是否on先做匹配,然后where做"辅助"过滤?或者是否有更一般的使用on对比规则where?谢谢.

mysql sql join where-clause

46
推荐指数
4
解决办法
6万
查看次数

EF:包含where子句

正如标题所示,我正在寻找一种方法来将where子句与include结合使用.

这是我的情况:我负责支持一个充满代码味道的大型应用程序.更改过多代码会导致各处出现错误,因此我正在寻找最安全的解决方案.

假设我有一个对象总线和一个对象People(Bus有一个导航道具Collection of People).在我的查询中,我需要选择只有醒着的乘客的所有公共汽车.这是一个简单的虚拟示例

在当前的代码中:

var busses = Context.Busses.Where(b=>b.IsDriving == true);
foreach(var bus in busses)
{
   var passengers = Context.People.Where(p=>p.BusId == bus.Id && p.Awake == true);
   foreach(var person in passengers)
   {
       bus.Passengers.Add(person);
   }
}
Run Code Online (Sandbox Code Playgroud)

在此代码之后,处理Context,并且在调用方法中,生成的Bus实体被映射到DTO类(实体的100%副本).

此代码导致多次调用DB,这是一个禁止,所以我在MSDN博客上找到了这个解决方案

这在调试结果时效果很好,但是当实体映射到DTO时(使用AutoMapper),我得到一个异常,即Context/Connection已经关闭并且无法加载该对象.(上下文总是关闭不能改变这个:()

所以我需要确保已经加载了Selected Passengers(导航属性上的IsLoaded也是False).如果我检查Passengers集合,Count也会抛出Exception,但是在Passegers集合中还有一个名为"包装相关实体"的集合,其中包含我的过滤对象.

有没有办法将这些包装的相关实体加载到整个集合中?(我无法更改automapper mapping配置,因为它在整个应用程序中使用).

有没有其他方式来获得活跃的乘客?

任何提示都是受欢迎的......

编辑

Gert Arnold的答案不起作用,因为数据未被急切加载.但是当我简化它并删除它的加载位置时.这真是奇怪,因为执行sql在两种情况下都返回所有乘客.因此,将结果放回实体时一定存在问题.

Context.Configuration.LazyLoadingEnabled = false;
var buses = Context.Busses.Where(b => b.IsDriving)
        .Select(b => new 
                     { 
                         b,
                         Passengers = b.Passengers
                     })
        .ToList()
        .Select(x => x.b)
        .ToList();
Run Code Online (Sandbox Code Playgroud)

EDIT2

经过很多努力,格特阿诺德的答案奏效了!正如Gert Arnold建议您需要禁用延迟加载并将其保持关闭状态.这将要求对应用程序进行一些额外的更改,因为上一代开发人员喜欢Lazy Loading -_-

c# entity-framework include where-clause

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

我可以在swift中使用for循环中的'where'吗?

是否有可能在另一个地方使用'where'关键字然后转换?我可以在for循环中使用它吗?

我有一个bools数组,都有一个值,我可以做这样的事情:

var boolArray: [Bool] = []

//(...) set values and do stuff


for value where value == true in boolArray {
   doSomething()
}
Run Code Online (Sandbox Code Playgroud)

这比使用if要好得多,所以我想知道是否有可能在for循环中使用where.Ty适合你的时间.

for-loop where where-clause for-in-loop swift

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

检查输入参数是否为空并在SQL Server中的位置使用它

WHERE子句中包含输入参数的最佳方法是什么,但如果它为null则将其排除?

我相信有很多方法,但我似乎无法记住.

我也可以使用COALESCE()?但我认为这仅适用于SELECTing值?

编辑

为了澄清,让我们说一个变量,@code ="1"然后我会在哪里,Where type='B' AND code = @code但如果@code is null那时我只想要Where type='B'- 注意缺失code = @code.

sql-server null coalesce where-clause sql-server-2008

36
推荐指数
6
解决办法
4万
查看次数

为什么要在SQL中使用WHERE 1 = 0语句?

我在应用程序的日志文件中看到了一个查询.它包含一个类似的查询:

SELECT ID FROM CUST_ATTR49 WHERE 1=0
Run Code Online (Sandbox Code Playgroud)

这样一个查询的用途是什么,必然会返回什么?

sql database where-clause

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

SQL Server:检查变量是否为空或WHERE子句为NULL

搜索产品列表时,@SearchType参数是可选的.如果@SearchType是空的,NULL那么它应该返回所有产品而不使用该WHERE子句.否则,如果它通过Equipment它然后将使用它.

ALTER PROCEDURE [dbo].[psProducts] 
    (@SearchType varchar(50))
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        P.[ProductId],
        P.[ProductName],
        P.[ProductPrice],
        P.[Type]
    FROM [Product] P
    -- if @Searchtype is not null then use the where clause
    WHERE p.[Type] = @SearchType
END
Run Code Online (Sandbox Code Playgroud)

sql sql-server if-statement where-clause

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

MySQL选择过去7天

我在这里阅读了一些帖子,似乎没什么特别的,但我还是不能选择最后几天的条目.

SELECT 
    p1.kArtikel, 
    p1.cName, 
    p1.cKurzBeschreibung, 
    p1.dLetzteAktualisierung, 
    p1.dErstellt, 
    p1.cSeo,
    p2.kartikelpict,
    p2.nNr,
    p2.cPfad

FROM 
    tartikel AS p1 WHERE DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)

INNER JOIN 
    tartikelpict AS p2 
    ON (p1.kArtikel = p2.kArtikel) WHERE (p2.nNr = 1)

ORDER BY 
    p1.kArtikel DESC

LIMIT
    100;', $connection);
Run Code Online (Sandbox Code Playgroud)

如果我在今天和过去7天之间添加,我的代码将不会输出任何内容.

mysql sql where-clause date-arithmetic

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

MySql内部加入WHERE子句

这是我的代码:

 SELECT table1.f_id  FROM table1 WHERE table1.f_com_id = '430' AND      
 table1.f_status = 'Submitted' 
 INNER JOIN table2
 ON table2.f_id = table1.f_id
 where table2.f_type = 'InProcess'
Run Code Online (Sandbox Code Playgroud)

我需要信息来自table1f_com_id430 相关联的所有id 和提交的状态,并且该类型应仅在存储在其他表(table2)中的进程中

f_idp_keyf_key在两个表中.
但这给了我错误,我认为我把这个WHERE条款写错了,如何修复它.

错误消息:#1064 - 您的SQL语法出错; 检查与MySQL服务器版本对应的手册,以便在第2行的'INNER JOIN table2 ON table2.f_id ='附近使用正确的语法

mysql sql where-clause mysql-error-1064

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

如何使用VB.NET和LINQ附加'where'子句?

我是VB.NET的新手,我在这里遇到一些麻烦,我觉得应该很简单.

保持简单,假设我有一个带有"Name"的Document表,我想搜索(实际上还有其他几个表,连接等等).我需要能够使用where基于传入的字符串值的子句构建查询.

示例 - 用户可以传入"ABC","ABC DEF","ABC DEF GHI".

最后的查询是(语法不正确,我知道):

Select * from Documents Where Name Like %ABC% AND Name Like %DEF% AND Name like %GHI%
Run Code Online (Sandbox Code Playgroud)

所以,我以为我可以这样做.

Dim query = From document In _context.Documents

<< loop based on number of strings passed in >>
query = query.Where( ... what goes here?? )
Run Code Online (Sandbox Code Playgroud)

出于某种原因,脑死亡或其他什么,我无法弄清楚如何在VB.NET中完成这项工作,或者我是否正确地做到了.

linq vb.net where-clause

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

T-SQL条件WHERE子句

在这里找到了几个类似的问题,但无法弄清楚如何应用于我的场景.

我的函数有一个名为@IncludeBelow的参数.值为0或1(BIT).

我有这个问题:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为0,我需要查询为:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND   l.SomeOtherCondition = @SomeOtherValue
AND   p.LocationType = @LocationType -- additional filter to only include level.
Run Code Online (Sandbox Code Playgroud)

如果@IncludeBelow为1,则需要排除最后一行.(即不要应用过滤器).

我猜它需要是一个CASE声明,但无法弄清楚语法.

这是我尝试过的:

SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server case-statement where-clause

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