繁体   English   中英

如何使用IN条件以及LEFT OUTER JOIN和ON

[英]How to use IN condition along with LEFT OUTER JOIN and ON

我想使用IN条件,它适用于值,不适用于另一个表的变量,这是我的示例

SELECT  A.*,B.* 
FROM table1 AS A 
LEFT JOIN erp_wh_salhd AS B ON B.InvNo = '15'  AND A.InvNo IN (B.filter1) 
//Not working  Comming only one row for B table

如果我直接传递值意味着它有效,即

SELECT  A.*,B.* 
FROM table1 AS A 
LEFT JOIN erp_wh_salhd AS B ON B.InvNo = '15'  AND A.InvNo IN (2,3)  
// Working. table B have two values 

如果erp_wh_salhdfilter1字段是用逗号分隔的值列表,则需要使用FIND_IN_SET而不是IN

SELECT  A.*,B.* 
FROM table1 AS A 
LEFT JOIN erp_wh_salhd AS B ON B.InvNo = '15'  AND FIND_IN_SET(A.InvNo, B.filter1) 

事实是您正在使用联接,可以尝试使用=

    SELECT  A.*,B.* 
    FROM table1 AS A 
    LEFT JOIN erp_wh_salhd AS B ON B.InvNo = '15'  
        AND A.InvNo  = B.filter1

IN子句允许多个值。 在第一个查询中,您仅提供一个值,但是:

AND A.InvNo IN (B.filter1)

那等于

AND A.InvNo = B.filter1

因此,仅将那些B行连接到A行,其中B行的InvNo为15,且filter1等于A的InvNo。

在第二个查询中,将InvNo为15的所有B行连接到InvNo为2或3的所有A行。

两个完全不同的查询,您无法真正进行比较。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM