SQL Server中使用IN子句时,如何将匹配标签纳入查询输出?
问题解决:将匹配的Tag标签加入SQL查询结果
首先修正你原SQL里的语法错误:子查询中from Products l后面直接跟and是语法错误,得改成where。
要把匹配的Tag加到输出结果里,用IN子句是办不到的——因为IN只能判断ProductID是否存在于子查询结果中,没法把对应的Tag值带出来。你之前尝试返回两列给IN子句,本身就不符合语法(IN要求子查询只返回单列),所以肯定失败。
正确的做法是用JOIN关联Products和Tags表,直接获取每个ProductID对应的Tag标签,下面是修改后的SQL:
select p.Currency, p.ProductID, p.Quantity, p.Channel, pc.Tags as Tag -- 新增的Tag列 from Products p join Tags pc on p.ProductID = pc.ProductID where pc.Tags in ('T1', 'T2', 'T3') group by p.Currency, p.ProductID, p.Quantity, p.Channel, pc.Tags
补充说明:
- 如果同一个ProductID对应多个符合条件的Tag,上面的SQL会返回多条记录(每个Tag占一行)
- 要是想把同一个ProductID的多个Tag合并成一行(比如用逗号分隔),可以用对应数据库的字符串聚合函数:
- MySQL:用
GROUP_CONCAT(DISTINCT pc.Tags) - PostgreSQL/SQL Server:用
STRING_AGG(DISTINCT pc.Tags, ',')
- MySQL:用
示例(以MySQL为例):
select p.Currency, p.ProductID, p.Quantity, p.Channel, GROUP_CONCAT(DISTINCT pc.Tags) as Tags -- 合并多个Tag为一个字符串 from Products p join Tags pc on p.ProductID = pc.ProductID where pc.Tags in ('T1', 'T2', 'T3') group by p.Currency, p.ProductID, p.Quantity, p.Channel
内容的提问来源于stack exchange,提问作者AliK
相关产品推荐
相关产品推荐

