I have 3 tables in total. I am trying to select the price of the cost food has to be the highest and the category name have to fall under organic.

I have came up with the following SQL QUERY but i have received an invalid relation error.

Could someone point me out what the problem might be ?

Thanks

SELECT PRICE, LABEL
FROM FOOD
WHERE FOOD.FOOD_ID = (
    SELECT FOOD_ID
    FROM FOOD_CATEGORY
    WHERE FOOD_CATEGORY.FOOD_ID = (
       SELECT FOOD_ID
       FROM CATEGORY
       WHERE NAME = 'ORGANIC'
    )
);

FOOD

  • FOOD_ID
  • LABEL
  • PRICE

FOOD_CATEGORY

  • FOOD_ID
  • CATEGORY_ID

CATEGORY

  • CATEGORY_ID
  • NAME

Relationship

FOOD.FOOD_ID = FOOD_CATEGORY.FOODID 

FOOD_CATEGORY.CATEGORYID = CATEGORY.CATEGORYID
有帮助吗?

解决方案

I suspect you have more foods that are of category 'ORGANIC'. Otherwise there is no need for the table FOOD_CATEGORY. The table FOOD_CATEGORY is there to create a many-to-many relation.

So why not :

SELECT PRICE, LABEL
FROM FOOD
JOIN FOOD_CATEGORY ON (FOOD_CATEGORY.FOOD_ID = FOOD.FOOD_ID)
JOIN CATEGORY ON (CATEGORY.CATEGORY_ID = FOOD_CATEGORY.CATEGORY_ID)
WHERE CATEGORY.NAME = 'ORGANIC';

Or use IN instead of =

SELECT PRICE, LABEL
FROM FOOD
WHERE FOOD.FOOD_ID IN (
    SELECT FOOD_ID
    FROM FOOD_CATEGORY
    WHERE FOOD_CATEGORY.CATEGORY_ID = (
       SELECT CATEGORY_ID
       FROM CATEGORY
       WHERE NAME = 'ORGANIC'
    )
);

其他提示

because its CATEGORY_ID instead of FOOD_ID

SELECT PRICE, LABEL
FROM FOOD
WHERE FOOD.FOOD_ID = (
    SELECT FOOD_ID
    FROM FOOD_CATEGORY
    WHERE FOOD_CATEGORY.FOOD_ID = (
       SELECT CATEGORY_ID
       FROM CATEGORY
       WHERE NAME = 'ORGANIC'
    )
);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top