gpt4 book ai didi

php - Mysql查询IN子句返回结果

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:29 25 4
gpt4 key购买 nike

美好的一天!所有星期五,

我的 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_id3913的一个类目信息。但是,如果我使用子查询值而不是子查询手动运行此查询,那么它会返回所有类别结果。

带子查询值的手动查询是这样的

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 + ',%'

一般评论:避免在 SQL 表中存储 CSV 数据。 MySQL 通过提供 FIND_IN_SET 并使绕过良好的表设计变得更容易,几乎使问题变得更糟。

关于php - Mysql查询IN子句返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com