首页 > 解决方案 > SQL 我可以在 JOIN 子句中有一个 IN 或 CONTAINS 吗?

问题描述

我正在加入两个 SQL 表,我想做这样的事情

LEFT JOIN uscities Ci 
        ON Customer_State = ci.state_id
        -- and Customer_City = ci.city
        and Customer_Zip in ci.zips

这有可能吗?

标签: sqlsql-serverleft-join

解决方案


你可以IN在一个JOIN子句中。事实上,您可以拥有任何您想要的运算符。

但是,您不能IN在单个字段上使用。事实上,您根本不应该将事物列表存储在字符串中。这是非常糟糕的数据建模。您应该有一个单独的表,每个 zip 和每个实体都有一行。这是 SQLish 做事的方式。

也就是说,我建议string_split()

LEFT JOIN uscities Ci 
ON c.Customer_State = ci.state_id AND
   c.Customer_Zip IN (SELECT value FROM STRING_SPLIT(ci.zips, ' '))

推荐阅读