基于示例数据,如何用SQL查询同一表中不能食用苹果的所有ID
查找无法食用苹果的ID:SQL解决方案
嘿,这个需求很常见,我来给你两种实用的SQL解法,适配不同的数据库场景!
首先明确假设:你的表名为food_preferences,包含两个字段——id(整数类型,标识用户ID)和edible_foods(字符串类型,存储用中文逗号、分隔的可食用食物列表)。
方法1:通用字符串匹配(支持所有SQL数据库)
这是最普适的写法,利用NOT LIKE直接筛选出不包含“苹果”的记录:
SELECT id FROM food_preferences WHERE edible_foods NOT LIKE '%苹果%';
这个方法简单直接,只要你的食物列表里“苹果”是作为独立项存在的(就像你给出的示例数据那样),完全可以满足需求。
方法2:精准匹配分隔项(适用于MySQL等支持FIND_IN_SET的数据库)
如果担心出现类似“苹果派”这种包含“苹果”但不是目标食物的误判(虽然你的场景里没有,但这个方法更严谨),可以用FIND_IN_SET函数。注意这个函数默认识别英文逗号作为分隔符,所以需要先把中文逗号替换成英文逗号:
SELECT id FROM food_preferences WHERE FIND_IN_SET('苹果', REPLACE(edible_foods, '、', ',')) = 0;
当FIND_IN_SET返回0时,说明“苹果”不在该ID的可食用食物列表里。
预期结果
根据你提供的示例数据,执行任意一种查询后,都会得到以下ID:
- 2(对应食物:葡萄、梨)
- 4(对应食物:橙子)
- 6(对应食物:梨、橙子)
内容的提问来源于stack exchange,提问作者user9256550
相关产品推荐
相关产品推荐

