【问题标题】:Multiple Tables - Lowest Value based on Where clause多个表 - 基于 Where 子句的最低值
【发布时间】:2019-05-21 00:50:33
【问题描述】:

目前有 3 个表格,包含以下列,

Table 1
item_id | cost_price

Table 2 
item_id | cost_price

Table 3
item_id | cost_price

需要按三个表中的最低值排序,其中子句按item_id排序。 item_id 在所有 3 个表之间共享。

我知道它可能是一个带有 INNER 连接的子查询?但就是不知道怎么写……

SELECT table1.cost_price, table2.cost_price, table3.cost_price FROM table2
INNER JOIN table1
ON table1.item_id= table2.item_id
INNER JOIN table3
ON table3.item_id= table1.item_id

我希望按查询中的最低 cost_Price 排序。但我不确定是否应该使用内连接。

【问题讨论】:

  • 您想要最低的总价以及与之相关的所有价值吗?或者,按价格升序排序?另外,您使用的是哪个 SQL?办理?甲骨文? MySQL?
  • 嗨,马克,我正在使用 mySQL,所有 3 个表中的总最低价格是目标。如果不清楚,请见谅:(

标签: sql


【解决方案1】:

你在找union all吗?

select item_id, cost_price from table1
union all
select item_id, cost_price from table2
union all
select item_id, cost_price from table3
order by cost_price;

【讨论】:

  • 嗨,戈登,这不正是我想要的,因为我想找到 3 张桌子之间的最低价格。那只会给我按每个 itemID 的 Cost_price 排序的所有输出?
  • @8bitmagic 。 . .您可以添加 fetch first 1 row only 或任何适合您的数据库的内容。
【解决方案2】:

也许有 CASE 语句(未经测试):

SELECT ABC.item_id
,   CASE
        WHEN ABC.t1_min_price < ABC.t2_min_price AND ABC.t2_min_price < ABC.t3_min_price THEN ABC.t1_min_price
        WHEN ABC.t1_min_price > ABC.t2_min_price AND ABC.t2_min_price > ABC.t3_min_price THEN ABC.t3_min_price
        ELSE ABC.t2_min_price
    END AS [min_price]
FROM (
    SELECT t1.item_id
    , (SELECT MIN(X.cost_price) fROM table1 AS X WHERE X.item_id = t1.item_id) AS [t1_min_price]
    , (SELECT MIN(Y.cost_price) fROM table2 AS Y WHERE Y.item_id = t1.item_id) AS [t2_min_price]
    , (SELECT MIN(Z.cost_price) fROM table3 AS Z WHERE Z.item_id = t1.item_id) AS [t3_min_price]
    FROM table1 AS t1
) AS ABC

或者,扩展另一个用户的答案:

SELECT X.item_id
, MIN(X.min_price) AS [lowest_price]
FROM (
    SELECT item_id, MIN(cost_price) AS [min_price] FROM table1
    UNION
    SELECT item_id, MIN(cost_price) AS [min_price] FROM table2
    UNION
    SELECT item_id, MIN(cost_price) AS [min_price] FROM table3
) AS X

问题是当您开始以相同的最低价格购买超过 1 件商品时,除非这无关紧要。如果是这样,只需...按某项排序并选择 TOP 1 或 LIMIT 1。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-10
    • 2021-08-06
    相关资源
    最近更新 更多