如何基于like条件连接2个表

5gfr0r5j  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(317)

我有两张table:

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',那么我应该怎么做?谢谢你们!

vlju58qv

vlju58qv1#

理论上,您应该能够使用 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)
)
jyztefdp

jyztefdp2#

试试下面的方法:使用like操作符,从你的问题来看,我觉得你不需要任何连接

select * from object
where category like '%HTML%'

相关问题