我相信这方面的主要问题是@interrobang 所说的,即您表示数据的方式。
如果您显示的此表 X 是每个人的列表项,则您应该有一个带有人员 ID 的列和另一个带有项目 ID 的列,以及多行来表示每个人的多个条目。这样做,您的搜索将在未来更快、更容易使用和维护。
SQL小提琴
MySQL 5.5.30 架构设置:
CREATE TABLE person (
id int auto_increment primary key,
name varchar(20)
);
CREATE TABLE item (
id int auto_increment primary key,
name varchar(20)
);
CREATE TABLE person_item (
id int auto_increment primary key,
person_id int,
item_id int
);
ALTER TABLE person_item ADD UNIQUE (person_id,item_id);
INSERT INTO person(id,name) VALUES
(1, 'John'),
(2, 'Mary'),
(3, 'Oliver');
INSERT INTO item (id,name) VALUES
(1,'Pen'),
(2,'Pencil'),
(3,'Book');
INSERT INTO person_item (person_id,item_id) VALUES
(1,1),
(1,3),
(2,2),
(3,1);
查询 1:
select p.name from person_item pi, person p, item i
where pi.person_id = p.id
and pi.item_id = i.id
and i.name LIKE 'Book%'
结果:
| NAME |
--------
| John |