我有两个表:
CREATE TABLE `category` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `category` (`id`, `name`) VALUES
(1, 'HTML'),
(2, 'CSS'),
(3, 'Javascript'),
(4, 'Jquery'),
(5, 'PHP'),
;
CREATE TABLE `object` (
`id` int(11) NOT NULL,
`name` varchar(50) NOT NULL,
`category` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `object` (`id`, `name`, `category`) VALUES
(1, 'Object1', 'HTML, CSS'),
(2, 'Object2', 'PHP, Javascript, HTML')
(3, 'Object3', 'PHP, Javascript');
现在我想选择对象表中所有元素的类别都包含“ HTML”,那么我该怎么办? 谢谢你们!
答案 0 :(得分:0)
尝试以下方法:使用类似运算符,从您的问题来看,我似乎不需要任何加入
select * from object
where category like '%HTML%'
答案 1 :(得分:0)
理论上,您应该能够使用ON
子句中的任何运算符来联接表
SELECT *
FROM `category` c
INNER JOIN `object` o ON o.category LIKE CONCAT('%', c.name, '%')
WHERE c.`name` = 'HTML'
尽管如此,我还是建议您对数据进行规范化,并为像这样的多对多关系创建另外一个category_object
表:
CREATE TABLE `category_object` (
`categoryId` int(11) NOT NULL,
`objectId` int(11) NOT NULL,
FOREIGN KEY (categoryId)
REFERENCES product(id),
FOREIGN KEY (objectId)
REFERENCES object(id)
)