MySQL:使用pair子句中的Select字段的结果插入

时间:2013-02-09 16:30:32

标签: mysql subquery

我需要在现有行中添加额外的数据项,并将结果插入第二个表中。我选择的每一行的数据项都不同,所以我不能只将它添加到SELECT语句中。原始查询是:

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

我希望能够像Row Constructor那样做一些事情并写下这样的查询:

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子句中对的第二个值('key_val')将作为最后一列添加到SELECT输出中。然后整个比赛将被插入决赛桌。

IN子句中的项目数量从3到100可能不等。

真的很抱歉,如果这是一个副本。我查了一下这样的事情: Select Query by Pair of fields using an in clause MySQL: How to bulk SELECT rows with multiple pairs in WHERE clause 我想我可以使用一个临时表,但我担心这会被调用的次数。

编辑 -

为了澄清,源表类似于:

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

希望这更清楚。

1 个答案:

答案 0 :(得分: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

DEMO SQLFIDDLE