这里有一些innodb表,是商店产品id,bm商店描述的关键词。
CREATE TABLE IF NOT EXISTS `myt` (
`am` varchar(15) NOT NULL,
`bm` varchar(30) NOT NULL,
KEY `am` (`am`),
KEY `bm` (`bm`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `myt` (`am`, `bm`) VALUES
('1', 'hello'),
('1', 'world'),
('2', 'this'),
('2', 'world'),
('3', 'hello'),
('2', 'there');
如何获得有“hello world”字样的产品?
我试过的查询:
(select * from myt a where bm='hello') union (select * from myt b where bm='world') where a.am=b.am
给了我一个错误:
#1064 - You have an error in your SQL syntax;
如果我存储这样的数据,应该索引吗?感谢。
P.S。
如果没有主键的innodb表是否重要?
答案 0 :(得分:1)
首先,您不应使用varchar来存储ID。
select am
from myt
where bm in ('hello', 'world')
group by am
having count(am) = 2
计数应该等于where子句中的描述数(在本例中为2)
考虑使用PostgreSQL而不是MySQL进行此类查询。使用PostgreSQL,您可以将数组存储在字段bm中,例如;
INSERT INTO `myt` (`am`, `bm`) VALUES
('1', ['hello','world']),
('2', ['this', 'world', 'there']),
('3', 'hello');
它还具有强大的功能,可以在之后搜索这些数组字段。
答案 1 :(得分:0)
您可以使用mysql中的OR来返回两件事的匹配项:
从myt a中选择* bm ='hello'或bm ='world'
答案 2 :(得分:0)
试试这个......
select *
from
(
select *
from myt
where bm='hello'
group by am
) t
join
(
select *
from myt
where bm='world'
group by am
) t1
on t.am=t1.am