【发布时间】:2013-08-28 17:44:15
【问题描述】:
我需要执行以下操作:
SELECT * FROM mp_sizes
WHERE size_id IN(SELECT size_ids FROM mp_size_categories
WHERE category_id = '3' AND sub_category_id = '5');
当我运行以下查询时,它会返回 3 条记录。
SELECT * FROM mp_sizes WHERE size_id IN(3,2,4);
当我运行子查询时,它会显示正确的结果。
SELECT size_ids FROM mp_size_categories
WHERE category_id = '3' AND sub_category_id = '5';
上面的查询给出了结果3, 2, 4。
但是当我在子查询中使用它时,它只返回一条记录。它仅返回第一个值 (3) 的大小详细信息。
如何获得所有 3 种尺寸(3、2、4)的结果?
【问题讨论】:
-
SELECT * FROM mp_sizes a LEFT JOIN mp_size_categories b ON b.size_ids = a.size_id WHERE b.category_id IN (3, 5); - 未测试,希望对您有所帮助
-
我不能这样使用。因为 mp_size_categories 表上的 size_ids 字段是 varchar 字段。它没有一个整数,而是所有大小的 id 都用逗号分隔,如 3,2,4
-
你有 sql fiddle 示例吗?
-
在逗号分隔的列表中使用多对多值会破坏数据库规范化规则。使用 group_concat 和 find_in_set 您可能会获得所需的结果集。我为你创建了一个 sql fiddle - sqlfiddle.com/#!2/5c078/2 - 不确定模式是否正确 - 至少是一个起点。希望这会有所帮助。
标签: mysql subquery conditional-statements