0

我需要向现有行添加额外的数据项并将结果插入第二个表中。我选择的每一行的数据项都是不同的,所以我不能只将它添加到 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 子句中对的第二个值 ('key_val') 将作为最后一列添加到 SELECT 输出中。然后整个批次将被插入决赛桌。

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

如果这是一个重复,真的很抱歉。我查找了类似的内容: 使用 in 子句按字段对选择查询 MySQL:如何在 WHERE 子句中批量选择具有多对的行 我想我可以使用临时表,但我担心这样的次数这将被调用。

编辑 -

为了澄清,源表是这样的:

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 回答