程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了SQL查找满足至少一个条件的元组列表大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决SQL查找满足至少一个条件的元组列表?

开发过程中遇到SQL查找满足至少一个条件的元组列表的问题如何解决?下面主要结合日常开发的经验,给出你关于SQL查找满足至少一个条件的元组列表的解决方法建议,希望对你解决SQL查找满足至少一个条件的元组列表有所启发或帮助;

问题: 找到至少满足以下条件之一的餐厅 A:

条件

  1. 位于“中环”区域的餐厅 A 或
  2. 至少售出 10 个比萨饼的餐厅 A 或
  3. A 出售的每个比萨饼的价格最多为 20 美元

预期结果: 列出(餐厅名称)

数据库架构: 客户(姓名,地区), 餐厅(名称,地区), 比萨(比萨), 销售(名称,披萨,价格), 喜欢(cname,披萨)

餐厅餐桌

  rname  |  area   
---------+---------
 Alpha   | East
 Beta    | East
 Gamma   | Central
 Delta   | Central
 Epsilon | north
 Zeta    | north
 Eta     | South
 Theta   | South
 Iota    | West
 Lambda  | West

销售表

  rname  |   pizza    | price 
---------+------------+-------
 Gamma   | Funghi     |    30
 Gamma   | Margherita |    30
 Gamma   | Marinara   |    19
 Delta   | Funghi     |    34
 Delta   | Margherita |    15
 Delta   | Marinara   |    22
 Epsilon | Hawaiian   |    28
 Zeta    | Funghi     |    17
 Eta     | Marinara   |    24
 Theta   | Diavola    |    15
 Theta   | Hawaiian   |    26
 Iota    | Funghi     |    27
 Lambda  | Diavola    |    21
 Lambda  | Funghi     |    30
 Lambda  | Hawaiian   |    16
 Lambda  | Margherita |    18
 Lambda  | Marinara   |    32

我的 sql 查询

SELECT disTINCT R.rname
FROM Restaurants R
NATURAL JOIN Sells S
WHERE (
    (CASE WHEN (R.area = 'Central') THEN 1 ELSE 0 END) +
    (CASE WHEN ((SELECT COUNT(disTINCT S2.pizza) FROM Sells S2 WHERE R.rname = S2.rname)>= 10) THEN 1 ELSE 0 END) +
    (CASE WHEN (S.price <= 20) THEN 1 ELSE 0 END) 
) >= 1;

问题 我似乎无法得到问题要求的正确答案。感谢您能帮我看看我的 sql 查询出了什么问题。

解决方法

我想我会在 where 子句中使用子查询:

select r.*
from restaurants r
where r.location = 'Central' or
      (select count(*)
       from sells s
       where s.rname = r.rname
      ) >= 10 or
      (select max(s.price)
       from sells s
       where s.rname = r.rname
      ) <= 20;

还有一些方法可以使用 JOIN 和聚合来处理此查询:

select r.*
from restaurants r left join
     sells s
     using (rname)
group by r.rname  -- assumes this is a unique or primary key
having r.location = 'Central' or
       count(*) >= 10 or
       max(s.price) <= 20;

两者都假设 sells 表只有比萨饼。

大佬总结

以上是大佬教程为你收集整理的SQL查找满足至少一个条件的元组列表全部内容,希望文章能够帮你解决SQL查找满足至少一个条件的元组列表所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: