You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Oracle SQL WHERE语句问题:查询双菜系厨师无预期结果

问题解答:为什么你的第三条SQL语句返回空结果?

嘿,我来帮你理清楚这个问题~

你遇到的核心问题是对AND逻辑的理解偏差:第三条语句里的speciality = 'Chinese Cuisine' and speciality = 'Japanese Cuisine',是要求同一行数据中的speciality字段同时等于两个完全不同的值——这显然是不可能的,因为一个字段在一行里只能有一个值,所以数据库自然返回空结果。

而Daniel之所以同时出现在前两个查询里,是因为他在speciality表中有两行记录:一行对应Japanese Cuisine,另一行对应Chinese Cuisine,并不是同一行同时包含两个菜系。

正确的写法:如何找出同时擅长两种菜系的厨师?

这里给你几种常用的解决方案:

方法1:使用IN + GROUP BY + HAVING

这种方法先筛选出属于目标菜系的所有记录,再按厨师分组,只保留拥有两种不同菜系的厨师:

SELECT cheffname
FROM speciality
WHERE speciality IN ('Chinese Cuisine', 'Japanese Cuisine')
GROUP BY cheffname
HAVING COUNT(DISTINCT speciality) = 2;

方法2:使用子查询(求两个结果集的交集)

先找出擅长日料的厨师,再从中筛选出同时在中餐列表里的人:

SELECT cheffname
FROM speciality
WHERE speciality = 'Japanese Cuisine'
AND cheffname IN (
    SELECT cheffname
    FROM speciality
    WHERE speciality = 'Chinese Cuisine'
);

方法3:使用自连接

把表和自身连接,通过厨师名字匹配,分别筛选两个菜系的记录:

SELECT s1.cheffname
FROM speciality s1
JOIN speciality s2 ON s1.cheffname = s2.cheffname
WHERE s1.speciality = 'Japanese Cuisine'
AND s2.speciality = 'Chinese Cuisine';

以上三种方法都能正确返回Daniel,你可以根据自己的习惯选择使用~

内容的提问来源于stack exchange,提问作者newcoder69

火山引擎 最新活动