我有一个查询,该查询使用具有多个条件的LEFT JOIN
来获取数据。但是,当我在条件中使用多个AND
子句时,查询不会返回任何数据。
例如:
LEFT JOIN tblName
on x.ABC=y.ABC
AND x.MNO="AnyValue"
AND x.UserId=1
不返回任何数据。
但是,当我删除最后一个AND
子句(即LEFT JOIN tblName on x.ABC=y.ABC AND x.MNO="AnyValue"
)时,它给我错误的结果。但是,是的,它至少返回了一些数据。
让我知道如何添加多个条件以使查询正常工作。
我想使用上述第一个条件(即LEFT JOIN tblName on x.ABC=y.ABC AND x.MNO="AnyValue" AND x.UserId=1
答案 0 :(得分:0)
您的AND ...
条件必须位于查询的WHERE
部分。
答案 1 :(得分:0)
首先,请确保您了解什么是LEFT JOIN。尝试以这种方式思考它。左侧是我按FROM子句的顺序顺序的看法。您从左到右阅读,因此第一张桌子是我一直想要的左侧。右侧(查询中的下一个表)是可选的,但如果存在的话,很好,我有更多详细信息。
因此以人员和订单为例。我要列出所有人。但是如果他们有命令,那就更好了。
select
P.LastName,
O.OrderID,
O.OrderDate
from
People P
LEFT JOIN Order O
on P.PersonID = O.PersonID
这将做到这一点。向所有人显示,如果他们有订单,那就顺其自然。如果他们有多个订单,则会在所有订单中显示一行。
现在,将条件扩展到下表。可以说我只想显示自2018年以来的订单。那将成为LEFT JOIN“ ON”子句的一部分,因为我只关心需求中的订单部分。
LEFT JOIN Order O
on P.PersonID = O.PersonID
AND O.OrderDate >= '2018-01-01'
我仍然会吸引所有人员,但是只有订单日期为2018年1月1日之后的订单信息会显示。
现在,如果您只关心只接受过订单并且在2018年以后下订单的人员,那么基本上可以省去LEFT JOIN并成为标准(INNER)JOIN
JOIN Order O
on P.PersonID = O.PersonID
AND O.OrderDate >= '2018-01-01'
JOIN表示必须在ORDER边表中找到记录
因此,在您的情况下,“ x”和“ y”的别名来自何处。在上下文中完全不清楚,但希望以上说明能帮助您解决查询。如果没有,请更详细地更新它,并阐明您要从中获得什么。