需要进一步优化我的输出到我的SQL查询

时间:2018-04-14 00:22:49

标签: sql oracle

我正在上班,我遇到了障碍。这是我正在使用的代码:

some_array.transpose.yield_self { |*a, b| a.flatten.uniq << b }
 #=> ["FANUC CORP", "100048", [9, 26, 23, 111]]

我得到的结果是:(只截断我关注的列)

SELECT  ANIM_ID, ANIM_NAME, FOOD_ITEM_ID, FOOD_ITEM_DESCRIPTION, FOOD_CATEGORY_DESCRIPTION, FOOD_PRICE

FROM ANIMAL

JOIN ANIMAL_DIETARY_REQUIREMENTS USING (ANIM_ID)

JOIN FOOD_ITEM USING (FOOD_ITEM_ID)

JOIN FOOD_CATEGORY USING (FOOD_CATEGORY_ID)

JOIN FOOD_ITEM_SUPPLIER USING (FOOD_ITEM_ID)

WHERE ANIM_NAME = 'Brianna' OR ANIM_NAME = 'Isaiah' 

AND FOOD_PRICE IN 
(SELECT MIN(FOOD_PRICE)
FROM FOOD_ITEM_SUPPLIER
GROUP BY FOOD_ITEM_ID);

"ANIM_NAME""FOOD_ITEM_ID""FOOD_ITEM_DESCRIPTION""FOOD_PRICE"

"Brianna" "121" "Super Mixed Seafood ""241.99"

"Brianna" "4" "Tasty Meat with Antioxi""384.76"

"Brianna" "4" "Tasty Meat with Antioxi""297.73"

"Isaiah" "9" "Nutritious Chicken" ""51.97"

"Brianna" "4" "Tasty Meat with Antioxi""48.4"

我得到了Brianna和美味肉的所有价格,而不仅仅是最低价。我只需要粗体的行。我一整天都在这里,我无法看到答案,我确信这是一个简单的代码,我只是缺少。这是我的第一个数据库类,也是我第一次使用SQL编写代码。这也是我的第一篇文章,所以如果我发错了,我会道歉。感谢你们给我的任何帮助或反馈。

2 个答案:

答案 0 :(得分:0)

首先,您需要围绕动物名称选择括号。事实上,你问过Brianna的所有价格,或Isaiah的所有价格,这些都是最低价格,这正是你得到的。

其次,您需要比较给定FOOD_ITEM_ID的最低价格,如:

SELECT ANIM_ID,
       ANIM_NAME,
       FOOD_ITEM_ID,
       FOOD_ITEM_DESCRIPTION,
       FOOD_CATEGORY_DESCRIPTION,
       FOOD_PRICE
FROM ANIMAL
INNER JOIN ANIMAL_DIETARY_REQUIREMENTS
  USING (ANIM_ID)
INNER JOIN FOOD_ITEM
  USING (FOOD_ITEM_ID)
INNER JOIN FOOD_CATEGORY
  USING (FOOD_CATEGORY_ID)
INNER JOIN FOOD_ITEM_SUPPLIER
  USING (FOOD_ITEM_ID)
WHERE (ANIM_NAME = 'Brianna' OR
       ANIM_NAME = 'Isaiah') AND
      (FOOD_ITEM_ID, FOOD_PRICE) IN (SELECT FOOD_ITEM_ID, MIN(FOOD_PRICE)
                                       FROM FOOD_ITEM_SUPPLIER
                                       GROUP BY FOOD_ITEM_ID);

您也可以用

替换OR动物名称选择
ANIM_NAME IN ('Brianna', 'Isaiah')

这将更短,并消除没有括号的歧义。

答案 1 :(得分:0)

您是否适合使用OR声明周围的括号进行隔离,并将FOOD_ITEM_IDFOOD_PRICE一起用于MINIMIUM WHERE价格的比较WHERE (ANIM_NAME = 'Brianna' OR ANIM_NAME = 'Isaiah') AND (FOOD_ITEM_ID,FOOD_PRICE) IN (SELECT FOOD_ITEM_ID,MIN(FOOD_PRICE) FROM FOOD_ITEM_SUPPLIER GROUP BY FOOD_ITEM_ID); 1}}子句:

db.getCollection('Store').find(
   { $text: { $search: "gaming mouse" } }, { score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )