【问题标题】:Mysql select with multiple tables and multiple foreign keysMysql选择多个表和多个外键
【发布时间】:2020-11-15 20:01:51
【问题描述】:

如果我有三个表,例如:

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

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

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

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

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

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

suppliersproducts 之间的唯一关系由 menu 表给出。

如何选择提供所有产品的所有供应商的名称?

感谢您的帮助!

【问题讨论】:

    标签: mysql sql foreign-keys multiple-tables


    【解决方案1】:

    以下是获取 ID 的方法。简单地汇总和计数:

    select m.sid
    from menu m
    group by m.sid
    having count(distinct pid) = (select count(*) from products);
    

    我会留给您获取供应商名称,您可以使用inexistsjoin,甚至是相关子查询来完成。

    【讨论】:

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