我需要在现有行中添加额外的数据项,并将结果插入第二个表中。我选择的每一行的数据项都不同,所以我不能只将它添加到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
希望这更清楚。
答案 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