[英]Mysql query IN clause return results
美好的一天! 整个星期五
我的SQL查询有问题。 我正在像这样子查询中使用IN类
SELECT
cm.category_id,
cd.name
FROM
category_master cm,
category_detail cd,
brand_to_categories b2c
WHERE
cm.category_id = b2c.category_id
AND
cd.category_id = cm.category_id
AND
cd.language_id = 1
AND
cm.status <> 2
AND
cm.category_id IN (SELECT DISTINCT sub_dd.categories FROM distribution_master bdm, distribution_detail bdd, subscription_category_to_brand_user sub_dd WHERE bdd.distribution_id = bdm.distribution_id AND bdm.distributor_id = 35 AND bdd.brand_id = 7191 AND sub_dd.sub_d_id = bdd.id)
AND
b2c.brand_id = 7191;
以下是为我造成问题的子查询。
cm.category_id IN (
SELECT DISTINCT
sub_dd.categories
FROM
distribution_master bdm,
distribution_detail bdd,
subscription_category_to_brand_user sub_dd
WHERE
bdd.distribution_id = bdm.distribution_id
AND
bdm.distributor_id = 35
AND
bdd.brand_id = 7191
AND
sub_dd.sub_d_id = bdd.id)
子查询的结果是这样的。
3913,4517,6059,7137,7138,7139,7140,7141,7144
此结果仅来自目标表中的单行,因为我将这些ID作为字符串存储在字段中。
现在的问题是,我无法获得所有类别的结果。 主查询最终结果仅返回category_id
为3913
一个类别信息。 但是,如果我使用子查询值而不是子查询手动运行此查询,则它将返回所有类别的结果。
带有子查询值的手动查询是这样的
SELECT
cm.category_id,
cd.name
FROM
category_master cm,
category_detail cd,
brand_to_categories b2c
WHERE
cm.category_id = b2c.category_id
AND
cd.category_id = cm.category_id
AND
cd.language_id = 1
AND
cm.status <> 2
AND
cm.category_id IN (3913,4517,6059,7137,7138,7139,7140,7141,7144)
AND
b2c.brand_id = 7191;
关于这个问题,请帮助我。
抱歉,我忘记了,我正在使用Mysql
假设您使用的是MySQL,请使用FIND_IN_SET
:
WHERE
...
FIND_IN_SET(cm.category_id,
(SELECT DISTINCT sub_dd.categories
FROM distribution_master bdm,
distribution_detail bdd,
subscription_category_to_brand_user sub_dd
WHERE bdd.distribution_id = bdm.distribution_id AND
bdm.distributor_id = 35 AND
bdd.brand_id = 7191 AND
sub_dd.sub_d_id = bdd.id)) > 0
如果您使用的是SQL Server,则我们需要做更多的工作:
WHERE ',' + (SELECT DISTINCT ...) + ',' LIKE '%,' + cm.category_id + ',%'
一般注释:避免将CSV数据存储在SQL表中。 MySQL通过提供FIND_IN_SET
并使其更容易进行良好的表设计,使问题变得更糟。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.