我试图在表格中找到遵循特定模式的行。 例如,有一个表分别有三列,ID,PRODUCT_ID和ACTION。
ID PRODUCT_ID ACTION
1架A001 ABC
2 A001 DHI
3 A001 FGH
4 B111 FGH
5 A001 JKL
6 A001 ZAB
我想检索具有3个动作的记录,ABC-FGH-ZAB用于相同的PRODUCT_ID。从上面的例子中,我想获得ID为1,3和6的行作为答案,并且应该忽略ID为4的行,因为它具有不同的PRODUCT_ID。如何在MySQL上制定查询以获得如下结果集?
ID PRODUCT_ID ACTION
1架A001 ABC
3 A001 FGH
6 A001 ZAB
我尝试不使用嵌套查询,除非出于性能原因。 ACTION的顺序很重要,因此不应检索FGH-ZAB-ABC。
提前致谢
答案 0 :(得分:1)
SELECT
yt1.ID AS First,
yt2.ID AS Second,
yt3.ID AS Third
FROM
YourTable yt1
JOIN YourTable yt2
ON yt2.ID > yt1.ID
AND yt2.Action = 'FGH'
AND yt2.Product_ID = y1.Product_ID
JOIN YourTable yt3
ON yt3.ID > yt2.ID
AND yt3.Action = 'ZAB'
AND yt3.Product_ID = y1.Product_ID
WHERE
yt1.Action = 'ABC'
答案 1 :(得分:0)
这样可以解决问题:
select a.id from myActions a, (select ASCII(act) n, id from myActions) c
where char(c.n+1)=substring(a.act,2,1) and char(c.n+2)=substring(a.act,3,1)
and a.id=c.id;
示例中的表格是:
create table myActions(
id int(11) not null auto_increment,
act char(3),
primary key(id))
insert into myActions (act) values
('ABC'),('DHI'),('EFG'),('LMN'),('XYV'),('XYZ'),('CBA'),('HIJ')
另一种选择是程序。
表格如下:
1 ABC
2 DHI
3 EFG
4 LMN
5 XYV
6 XYZ
7 CBA
8 HIJ
结果是:1,3,4,6,8
更新: 在查询结束时添加:和productId ='A001'得到:
select a.id from myActions a, (select ASCII(act) n, id from myActions) c
where char(c.n+1)=substring(a.act,2,1) and char(c.n+2)=substring(a.act,3,1)
and a.id=c.id and productId='A001';
您需要指定您寻找的productId,因为可能存在两个具有匹配集的不同productId。