【问题标题】:Mysql select with multiple foreign keysMysql 选择多个外键
【发布时间】:2020-11-14 15:48:01
【问题描述】:

我现在开始使用 SQL,但仍然有一些基本的困难。

假设我有三个表,例如:

供应商(sID:整数,sName:varchar,描述:varchar); 以 sID 作为主键

+-----+-----------+-------------+
| sID |   SName   | description |
+-----+-----------+-------------+
| 1   | Supplier1 | Desc1       |
| 2   | Supplier2 | Desc2       |
| 3   | Supplier3 | Desc3       |
| 4   | Supplier4 | Desc4       |
| ... | ...       | ...         |
+-----+-----------+-------------+

产品(pID:整数,pName:varchar,size:varchar);以 pID 作为主键

+-----+----------+------+
| pID |  pName   | size |
+-----+----------+------+
| 1   | Product1 | S    |
| 2   | Product2 | M    |
| 3   | Product3 | B    |
| 4   | Product4 | M    |
| ... | ...      | ...  |
+-----+----------+------+

菜单(sID:整数pID:整数,成本:varchar);以 sIDpID 作为外键

+-----+-----+------+
| sID | pId | cost |
+-----+-----+------+
| 1   | 4   | 10   |
| 2   | 16  | 20   |
| 8   | 1   | 5    |
| 8   | 2   | 8    |
| ... | ... | ...  |
+-----+-----+------+

供应商和产品之间的唯一关系由菜单表给出。

我如何选择至少提供一种尺寸为“M”的产品和至少一种尺寸为“B”的产品的所有供应商?

我认为这是简单的任务,但对我来说是全新的,我真的陷入了困境。 感谢您的帮助!

【问题讨论】:

标签: mysql sql database foreign-keys


【解决方案1】:

你可以使用聚合和having:

select m.sid
from menu m join
     products p
     on m.pid = p.pid
group by m.sid
having sum(size = 'M') > 0 and
       sum(size = 'B') > 0;

【讨论】:

    【解决方案2】:

    加入表格,过滤结果集,以便您只获得具有您希望在较少行数上聚合的产品的行,然后按供应商分组并在HAVING 子句中设置条件:

    select s.sid, s.name
    from suppliers s 
    inner join menu m on m.sid = s.sid
    inner join products p on p.pid = m.pid
    where p.size in ('M', 'B')
    group by s.sid, s.name
    having count(distinct p.size) = 2  
    

    【讨论】:

      猜你喜欢
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多