【问题标题】:sql left join cannot get right resultsql左连接不能得到正确的结果
【发布时间】:2012-09-11 08:31:25
【问题描述】:

现在,我有两个表,Locationq_Location,位置为主表。我这样写 sql left join:

SQL1:
    SELECT L.ID,QL.* 
    FROM LOCATION L 
    LEFT JOIN Q_LOCATION QL ON L.ID=QL.LOCATION_ID 
                         AND L.WAREHOUSE_ID=QL.WAREHOUSE_ID
                         AND ISNULL(ql.VIRTUAL, 'N') = 'N' 
                         AND ISNULL(ql.PICKABLE, 'y') = 'Y' 
    where l.warehouse_id='mmc-main

但结果是错误的。 if sql语句如下:

SQL2:  
    SELECT L.ID,QL.* 
    FROM LOCATION L 
    LEFT JOIN Q_LOCATION QL ON L.ID=QL.LOCATION_ID 
                            AND L.WAREHOUSE_ID=QL.WAREHOUSE_ID
    where l.warehouse_id='mmc-main' 
    AND ISNULL(ql.VIRTUAL, 'N') = 'N'
    AND   ISNULL(ql.PICKABLE, 'y') = 'Y' 

now 如果正确,则结果。我想知道为什么第一个sql是错误的,有人可以帮助我吗?先谢谢!

【问题讨论】:

  • 也许你应该给出一些结果,并说出什么是错的,什么是对的以及你想要达到的目标。

标签: sql join where


【解决方案1】:

在 OUTER JOIN(左或右)中应用过滤器时要小心——它与在 WHERE 子句中应用过滤器不同。您的第一个查询未按预期工作,因为如果连接失败,仍将返回 LEFT 表行,并且您的附加 RIGHT 表过滤器 ISNULL(ql.VIRTUAL, 'N') = 'N'ISNULL(ql.PICKABLE, 'y') = 'Y' 将被忽略。

参见此处:WHERE Clause vs ON when using JOIN

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 2023-02-11
    相关资源
    最近更新 更多