1

特定のパターンに従うテーブル内の行を見つけようとしています。たとえば、それぞれID、PRODUCT_ID、ACTIONの3つの列を持つテーブルがあります。

IDPRODUCT_IDアクション

1 A001 ABC
2 A001 DHI
3 A001 FGH
4 B111 FGH
5 A001 JKL
6 A001 ZAB

同じPRODUCT_IDのABC-FGH-ZABという3つのアクションを順番に持つレコードを取得したいと思います。上記の例から、IDが1、3、および6の行を回答として取得したいと思いますが、ID 4の行はPRODUCT_IDが異なるため、無視する必要があります。MySQLで以下のような結果セットを持つクエリを作成するにはどうすればよいですか?

IDPRODUCT_IDアクション

1 A001 ABC
3 A001 FGH
6 A001 ZAB

パフォーマンス上の理由がない限り、ネストされたクエリを使用しないようにしています。ACTIONの順序は重要であるため、FGH-ZAB-ABCは取得しないでください。

前もって感謝します

4

2 に答える 2

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'
于 2012-03-06T22:14:21.537 に答える
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';

セットが一致する2つの異なるproductIdが存在する可能性があるため、検索するproductIdを指定する必要があります。

于 2012-03-06T23:00:24.027 に答える