Mysql 如何基于相似条件连接两个表

Mysql 如何基于相似条件连接两个表,mysql,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 `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”,那么我应该怎么做呢?
谢谢你们

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

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

理论上,您应该能够使用
ON
子句中的任何运算符联接表

SELECT *
FROM `category` c
INNER JOIN `object` o ON  o.category LIKE CONCAT('%', c.name, '%')
WHERE c.`name` = 'HTML'
尽管如此,我还是建议您规范化数据,并为多对多关系创建一个更多的
category\u对象
表,如下所示:

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

为什么要连接两个表?因为您只需要一个表中的值,而这两个表之间没有关系。首先,您必须规范化该表,因为您使用的是类别名称而不是类别id。如果您使用的是类别名称,则完全不需要join。感谢您的回复,我不仅想了解具体情况,还想了解一般情况,返回的结果包括来自两个表的数据,我尝试使用CONCAT(“%”,object.category,“%”等条件连接:category.name,但结果在少数情况下不正确谢谢您的回复。我不仅想了解具体情况,还想了解一般情况。您的预期输出是什么?我的预期输出是每个类别显示所有对象都有类别字段包含该名称谢谢您的回复!我尝试使用CONCAT(“%”,object.category,“%”)之类的条件:category.name联接,但结果只有在object.category有一个值时才正确