MySQL:选择不在列表中的项目

MySQL:选择不在列表中的项目,mysql,Mysql,如何选择列表中但不在表中的项目?例如,如果给我一个类似的列表:“苹果”、“香蕉”、“胡萝卜”,我的表格如下: fruit: ------ apple banana 我希望查询的结果是“carrot”,因为它是提供的列表中不在表中的元素。我该怎么做 SELECT v.fruit FROM ( SELECT 'apple' AS fruit UNION ALL SELECT 'banana' UNION ALL SELECT 'carrot') v LEFT

如何选择列表中但不在表中的项目?例如,如果给我一个类似的列表:
“苹果”、“香蕉”、“胡萝卜”
,我的表格如下:

fruit:
------
apple
banana
我希望查询的结果是
“carrot”
,因为它是提供的列表中不在表中的元素。我该怎么做

SELECT v.fruit FROM (
    SELECT 'apple' AS fruit
    UNION ALL
    SELECT 'banana'
    UNION ALL
    SELECT 'carrot') v
LEFT JOIN friuttable ft ON ft.fruit = v.fruit
    WHERE ft.fruit IS NULL
另一个:


实现这一点的最佳方法是将列表也放在表格中:

Table fruitable:
fruit 
------
apple
banana

Table fruitable_list:
fruit
------
apple
banana
carrot
然后您的查询变成:

SELECT fruitable_list.fruit FROM fruitable_list
LEFT JOIN fruitable
  ON fruitable.fruit = fruitable_list.fruit
WHERE fruitable.fruit IS NULL
结果:

fruit
------
carrot

很难在不在数据集中的结果集中返回记录。

@luqita:是的,我没有假装是通用解决方案,但想不出其他任何东西。对可以容纳数千种物品的解决方案感到好奇。@luqita:可能还有另一种,只给我所有在表中但不在列表中的水果(必须是相反的,所有不在表中但在列表中的水果)如果使用MySQL,您可能需要获取表中的值,然后将它们从列表中删除。如果您不反对使用其他技术,则可以更具可扩展性的是Redis数据库中存在一系列管道化的
密钥(或者可能是
SISMEMBER
密钥集)。@Michael Mior:完全没有理由仅仅因为一项技术就移动到Redisquery@zerkms同意。除非该查询对您的应用程序至关重要,并且您无法找到使其快速运行的方法。我建议把它作为最后的手段。是的,而且可能会把桌子变成临时的
fruit
------
carrot