2013-02-09 18 views
0

我有要求将一个额外的数据项添加到现有的行,并将结果插入到第二个表中。数据项对于我选择的每一行都不相同,所以我不能将它添加到SELECT语句中。原来的查询是:MySQL:使用对子句中的选择字段的结果插入

SELECT player_id,token_id,email FROM players 
WHERE token_id in (101,102) OR email in ("[email protected]"); 

我希望能够做到像一排构造和编写查询是这样的:

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 (("[email protected]", 'qpr')); 

所以这第二个值(“key_val” )来自IN子句中的对将作为最后一列添加到SELECT输出中。然后整个批次将被插入到最终表格中。

IN子句中的项目数将从3到100之间不等。

真的很抱歉,如果这是一个dup。我抬头看起来像这样: Select Query by Pair of fields using an in clause MySQL: How to bulk SELECT rows with multiple pairs in WHERE clause 我想我可以使用临时表,但我担心这将被称为次数。

Edit--

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

player_id, token_id, email 
=================================== 
1   101  null 
2   102  null 
3   null  [email protected] 

和日期被提供的是:

(token_id=101, key_val='xyz'),(token_id=102, key_val='abc'),(email='[email protected]', key_val='qpr') 

和预期的输出将是:

player_id token_id email   keyy_val 
========== ========= ============== ======== 
1   101  null   zyz 
2   102  null   abc 
3   null  [email protected] qpr 

希望这可以让它更清晰。

回答

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 ("[email protected]") 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 = "[email protected]" , 'qpr' , NULL)) 
) key_val 

from players 
)p 

DEMO SQLFIDDLE

+0

这是不太一样的,因为它也将匹配token_id/key_val对101,ABC和102/XYZ,这是不是在OP的要求行。 – hrunting 2013-02-09 16:56:15

+0

也许我没有解释得很好。 'key_val'不在数据库中。它是与我想在SELECT输出中添加一行的token_id(来自客户端设备)相关的一段数据。 – jmc 2013-02-09 16:56:47

+0

试试我编辑的答案 – 2013-02-09 19:22:40