如何基于LIKE条件联接2个表

时间:2018-09-10 10:36:46

标签: mysql

我有两个表:

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”,那么我该怎么办? 谢谢你们!

2 个答案:

答案 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)
)