0

既存の行に追加のデータ項目を追加し、その結果を 2 番目のテーブルに挿入する必要があります。選択する行ごとにデータ項目が異なるため、単純に SELECT ステートメントに追加することはできません。元のクエリは次のとおりです。

SELECT player_id,token_id,email FROM players
WHERE token_id in (101,102) OR email in ("test4@test.com");

行コンストラクターのようなものを実行して、次のようなクエリを記述できるようにしたいと思います。

SELECT player_id,token_id, email, key_val FROM players
WHERE (token_id, key_val) in ( (101, 'xyz'),(102,'abc'))
   OR (email, key_val) in ( ("test4@test.com", 'qpr') );

そのため、IN 句のペアの 2 番目の値 ('key_val') が最後の列として SELECT 出力に追加されます。そして、ロット全体がファイナル テーブルに挿入されます。

IN 句の項目数は、3 から場合によっては 100 までさまざまです。

これが重複である場合は本当に申し訳ありません。次のようなものを調べました: in 句を使用したフィールドのペアによるクエリの選択 MySQL: WHERE 句で複数のペアを使用して SELECT 行を一括処理する方法 一時テーブルを使用できると思いますが、これが呼び出されます。

編集 -

明確にするために、ソース テーブルは次のようなものです。

player_id, token_id, email
===================================
1          101       null
2          102       null
3          null      test4@test.com

提供される日付は次のとおりです。

(token_id=101, key_val='xyz'),(token_id=102, key_val='abc'),(email='test4@test.com', key_val='qpr')

意図した出力は次のようになります。

player_id  token_id  email          keyy_val
========== ========= ============== ========
1          101       null           zyz
2          102       null           abc
3          null      test4@test.com qpr

これがより明確になることを願っています。

4

1 に答える 1

1

これを試して

SELECT player_id,token_id, email, key_val 
FROM players
WHERE token_id in (101,102) AND key_val IN ('xyz','abc')
OR ( email in ("test4@test.com") AND  key_val IN ('qpr') );

編集 -。これを試して

 SELECT player_id,token_id, email, key_val 
 FROM ( select player_id,token_id, email, 
  if(`token_id` =101 , 'xyz',
  if(`token_id` =102 , 'abc' ,
  if(email = "test4@test.com" , 'qpr' , NULL))
  ) key_val

from players 
)p

デモSQLFIDDLE

于 2013-02-09T16:38:38.567 に答える