8739


ibatisで受け取ったList型のキーワードで  
キーワードの数だけSELECTを行いたいと考えています。  
キーワードと一致した分だけポイントを加算していく方法は無いでしょうか？  
イメージとしては下記のSQLのように加算していきたいと考えています。  
解決方法が有ればどなたかお願い致します。

[code]

    SELECT tbl1.id,point1 + point2 AS point
    FROM 
    (SELECT user.id, user_point1.point1
    FROM tbl_user AS user
        (SELECT id,100::integer AS point1
        FROM tbl_user
        WHERE user_name LIKE '%田中%') AS user_point1
        ON user.id = user_point1.id
    ) AS tbl1
    FULL OUTER JOIN
            (SELECT id,100::integer AS point2
            FROM tbl_user
            WHERE user_name ILIKE '%田中%') AS user_point2
            ON tbl1.id = user_point2.id
    
[/code]


CC BY-SA 3.0
2015-04-03T11:54:02.277
8730
2015-04-04T01:25:59.517
2015-04-03T12:02:15.613
49
8876
question
sql
ibatisを用いたSQL


質問にあるSQLを出力するためには、キーワードの他にテーブルのエイリアスとしてインデックスの値が必要となります。  
`MyBatis`であれば`<foreach>`要素で`index`が参照できますが、`iBatis`の`<iterate>`では難しいのではないかと思います。

同様の結果が取得できるエイリアスが不要なSQLとしては

[code]

    SELECT id
         , (CASE WHEN user_name LIKE '%田中%' THEN 100 ELSE 0 END)
         + (CASE WHEN user_name LIKE '%hoge%' THEN 100 ELSE 0 END)
         + (CASE WHEN user_name LIKE '%fuga%' THEN 100 ELSE 0 END) AS point
      FROM tbl_user
    
[/code]

や

[code]

    SELECT id, SUM(point) AS point
      FROM
    (
        SELECT id, 100 AS point FROM tbl_user
        UNION ALL
        SELECT id, 100 AS point FROM tbl_user
        UNION ALL
        SELECT id, 100 AS point FROM tbl_user
    )
    
[/code]

が思いつきます。


CC BY-SA 3.0
2015-04-04T01:25:59.517
8739
2015-04-04T01:25:59.517
5750
8730
answer