【问题标题】:How to get info from three tables with a MIN (MySQL)如何使用 MIN (MySQL) 从三个表中获取信息
【发布时间】:2013-02-23 09:25:12
【问题描述】:

我有四个表,如下所示:

items
| id | name  | category |
-------------------------
| 1  | item1 | toy      |  
| 2  | item2 | toy      |
| 3  | item3 | home     |
-------------------------
items2
| id | name  | category | size |
--------------------------------
| 1  | itemA | toy      | s    |
| 2  | itemB | home     | l    |
--------------------------------
prices
| items.id | price |
--------------------
|  1       |  10   |
|  1       |  15   |
|  2       |  20   |
|  3       |  25   |
|  3       |  20   |
--------------------
prices
| items2.id | price |
--------------------
|  1        |  15   |
|  2        |  50   |
|  2        |  40   |
--------------------

我需要得到一个同时包含 items 和 items2 的结果,以及每个价格的 MIN。在这个例子中,结果应该是这样的:

| id | name  | category | size | minprice |
-------------------------------------------
| 1  | item1 | toy      | null | 10       |
| 2  | item2 | toy      | null | 20       |
| 3  | item3 | home     | null | 20       |
| 1  | itemA | toy      | s    | 15       |
| 2  | itemB | home     | l    | 40       |
-------------------------------------------

我也应该可以ORDER BY minprice,但我确信当我知道如何加入他们时,我也可以这样做。

提前致谢!

【问题讨论】:

    标签: mysql sql join min


    【解决方案1】:

    我建议您合并表项和项2。如果某个字段不适用于某个项目(例如本例中的 size),这就是 null 的用途。

    我还没有测试过它是否有效,但你想要这样的东西:

    SELECT i.id, name, category, null as size, min(prices.price) from items i
    JOIN prices on prices.id = i.id
    GROUP BY i.id, i.name, i.category, size
    UNION ALL
    SELECT i2.id, name, category, size, min(prices2.price) from items2 i2
    JOIN prices2 on prices2.id = i2.id
    GROUP BY i2.id, i2.name, i2.category, i2.size
    

    【讨论】:

    • 恕我直言UNION ALL 会更好,因为不需要消除重复。
    • 您不能选择未包含在分组依据的非聚合。 MySQL 允许这样的查询,但它不可靠并且不会在任何健全的数据库上工作。
    【解决方案2】:

    据我所知,你把事情复杂化了。你只需要一张桌子。对于 item 关系中没有大小的元组,只需将其标记为 null。

    这可能过于简单化了。如果价格是“销售”或类似的东西,您可以使用左连接来建立您正在寻找的关系

    所以

    SELECT i.id, i.name, i.category, i.size, p.price as min_price FROM items i LEFT JOIN price p where p.price

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多