gpt4 book ai didi

SQL不存在问题

转载 作者:行者123 更新时间:2023-12-04 20:39:58 28 4
gpt4 key购买 nike

在处理查询中的不存在子句时遇到一些麻烦。

我有三张表:

用餐

no_meal integer
type_meal varchar(255)

已消耗
no_meal integer
designation varchar(255)
quantity integer

食品
designation varchar(255)
quantity integer
type varchar(255)

食物中的数量是存储的数量,消耗的数量是消耗的数量,因此它们会有所不同,因此自然内部连接不会减少它。
  • 食物种类可以是'饮料''肉''鱼'等等。
  • 用餐类型可以是“早餐”“午餐”“晚餐”

  • 我想要一个查询,它会告诉我在所有类型的膳食中消耗的饮料。

    我一直在切换和测试代码,但无法做到正确。目前我正在尝试这个:
    SELECT Consumed.designation
    FROM Consumed
    WHERE NOT EXISTS

    (SELECT type_meal
    FROM Consumed, Food, Meal
    WHERE Consumed.designation = Food.designation
    AND Consumed.no_meal = Meal.no_meal
    AND type = 'Drink'
    ORDER BY Food.designation)

    EXCEPT

    (SELECT type_meal
    FROM Meal);

    我他妈的怎么做对?

    感谢您的投入。

    编辑 :

    我将添加一些数据以使其更清晰。

    食品
    Steak   100    Meat
    Water 200 Drink
    Coca cola 300 Drink

    用餐
    0001     Breakfast
    0002 Lunch
    0003 Dinner

    已消耗
    0001     Water       50
    0002 Steak 20
    0001 Coca cola 20
    0003 Water 5
    0002 Water 15

    现在,我想知道每顿饭都喝了哪种饮料,哪种饮料只会给水。

    希望我清除了一些关于这个问题的想法

    最佳答案

    稍微扭曲一下你的想法,用双重否定来思考......

    I want [...] the drinks that have been consumed in all types of meals.



    您想要所有没有餐点类型且该饮品不属于餐点类型的所有饮品:
    select distinct f.designation 
    from food f
    where
    type = 'Drink' and
    not exists (
    select *
    from meal m1
    where not exists (
    select *
    from meal m2
    join consumed c on c.no_meal = m2.no_meal
    where
    m1.no_meal = m2.no_meal and
    c.designation = f.designation
    )
    )

    这叫做 relational division .

    关于SQL不存在问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4279978/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com