2017-04-06 106 views
0

我有一个表是这样的:MySQL的左连接上的列表

id | val1 | val2 
---------------- 
1 | 100 | 200 
2 | 200 | 100 
3 | 150 | 250 

我从API获取列表,如:

((1, 100, 200), 
(2, 200, 101), 
(3, 150, 250)) 

从列表我从表中得到同样的数据,在那里我可以看到id 2的列val2已经从100更改为101.

什么样的MySQL查询将返回列表的第二行?也就是说,其中一个值的行发生了更改。

它应该测试val1和val2列。

回答

1

您可以使用in()运营商具有多个字段的一个列表:

select * from table 
where (id, val1, val2) not in ((1, 100, 200), 
           (2, 200, 101), 
           (3, 150, 250)) 
+0

谢谢您的回答。查询返回id = 2,val1 = 200,val2 = 100。有没有办法返回id = 2,val1 = 200,val2 = 101? –

+0

那么,有一种方法可以在MySQL中执行此操作,但如果您在基于ID的应用程序层中执行此操作,则可能会更容易。为了使它在sql中工作,必须将API列表中的数据插入到临时表中,或者通过按行拆分API列表来组装一个派生表,并使用一系列'union'将它们组合在一起。 – Shadow