我有两个名为
的表PRODUCT_CATEGORY
CREATE TABLE `product_category` (
`pid` int(11) NOT NULL,
`cid` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--
-- Dumping data for table `product_category`
--
/*!40000 ALTER TABLE `product_category` DISABLE KEYS */;
INSERT INTO `product_category` (`pid`,`cid`) VALUES
(1,1),
(2,3),
(3,2),
(4,2),
(5,3),
(1,2),
(2,4),
(3,1);
和类别表
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`cat_name` varchar(50) NOT NULL,
`mapped_cat_id` varchar(250) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `category`
--
/*!40000 ALTER TABLE `category` DISABLE KEYS */;
INSERT INTO `category` (`id`,`cat_name`,`mapped_cat_id`) VALUES
(1,'c1','1,2,4'),
(2,'c2','2,3'),
(3,'c3','3,4'),
(4,'c4','4,1,3');
/*!40000 ALTER TABLE `category` ENABLE KEYS */;
当我运行此查询时
select distinct pid from
product_category where cid in (1,2,4)
我得到了pid(1,3,4,2)的结果
但是当我运行查询
时select distinct pid from
product_category where cid in (select mapped_cat_id from category where id=1)
我得到了pid(1,3)的结果
如何将子查询与'IN'子句一起使用?
我知道我提出问题的方式是错误的,因为我不知道如何在这里创建表格,这就是为什么我编写查询而不是表格。
答案 0 :(得分:2)
我认为逗号分隔值不好。
删除category
表的内容并使用以下查询插入
INSERT INTO `category` (`id`, `cat_name`, `mapped_cat_id`) VALUES
(1, 'c1', '1'),
(2, 'c2', '2'),
(3, 'c3', '3'),
(4, 'c4', '4'),
(5, 'c1', '2'),
(6, 'c1', '4'),
(7, 'c2', '3'),
(8, 'c3', '4'),
(9, 'c4', '1'),
(10, 'c4', '3');
然后使用以下查询来获得结果
select distinct pid from
product_category where cid in
(select mapped_cat_id from category where cat_name='c1')
答案 1 :(得分:0)
您可能正在寻找 FIND_IN_SET()功能
select distinct pid from
product_category where FIND_IN_SET(cid,
(select mapped_cat_id from category where id=1));
<强> SAMPLE FIDDLE 强>
由于mapped_cat_id保存为逗号分隔值(varchar),因此条件检查仅使用第一个整数。这是1