值最低的MYSQL Get记录|视图的SELECT在FROM子句中包含一个子查询

值最低的MYSQL Get记录|视图的SELECT在FROM子句中包含一个子查询,mysql,sql,view,Mysql,Sql,View,我一直在研究这个问题,这让我发疯 我有一个产品表和一个包含子产品的表。 简而言之,我想创建一个包含产品数据和子产品的最低折扣价格的视图。考虑一件衬衫,有几个子产品颜色/尺寸等 其次,我想在视图中使用这个查询,这部分内容让我发疯 我现在的问题是: SELECT m.* from product_items m join (select product_id, min(price_discount) md from product_items group by product

我一直在研究这个问题,这让我发疯

我有一个产品表和一个包含子产品的表。 简而言之,我想创建一个包含产品数据和子产品的最低折扣价格的视图。考虑一件衬衫,有几个子产品颜色/尺寸等

其次,我想在视图中使用这个查询,这部分内容让我发疯

我现在的问题是:

  SELECT m.* from product_items m join
  (select product_id, min(price_discount) md 
       from product_items group by product_id) mm
  on m.product_id=mm.product_id and m.price_discount=md
这个查询正在运行,我得到了很好的结果。但现在我想创建一个视图vw_product_。 然后error:error 1349 HY000:View的SELECT在FROM子句中包含一个子查询

有人能帮我将该查询转换为兼容的视图查询吗?谢谢

根据手册,视图不能包含子查询。如果确实要在查询上创建视图,则需要为子查询创建单独的视图,例如

第一视图

第二视图

要查询主视图

SELECT * FROM MinimumPriceList
SELECT语句不能在FROM子句中包含子查询。 SELECT语句不能引用系统或用户变量。 在存储程序中,定义不能引用程序参数或局部变量。 ....
您有几个选择:

将子查询放入视图可能会很慢,因为生成的视图没有用于执行后续联接的索引:

CREATE VIEW mm AS
  SELECT   product_id, MIN(price_discount) price_discount
  FROM     product_items
  GROUP BY product_id
;

CREATE VIEW my_view AS
  SELECT * FROM product_items m NATURAL JOIN mm
;
使用a也可能很慢,因为必须对表中的每个记录评估子查询-使用product_id、price_折扣的复合索引将获得最佳性能:

优化相关子查询还将受益于产品id、价格折扣的综合索引:


非常感谢。我现在可以用了。这有点迂回,但又是如此;它在工作。谢谢你!!嵌套视图不是因为性能原因而有点糟糕吗?哇。谢谢你的回答。虽然我使用了另一个答案,但我将对此进行调查。另一个答案在速度/优化方面对我来说似乎更好。
SELECT * FROM MinimumPriceList
CREATE VIEW mm AS
  SELECT   product_id, MIN(price_discount) price_discount
  FROM     product_items
  GROUP BY product_id
;

CREATE VIEW my_view AS
  SELECT * FROM product_items m NATURAL JOIN mm
;
CREATE VIEW my_view AS
  SELECT * FROM product_items m WHERE price_discount = (
    SELECT MIN(mm.price_discount)
    FROM   product_items mm
    WHERE  mm.product_id = m.product_id
  )
;
CREATE VIEW my_view AS
  SELECT * FROM product_items m WHERE NOT EXISTS (
    SELECT 1
    FROM   product_items mm
    WHERE  mm.product_id     = m.product_id
       AND mm.price_discount < m.price_discount
    LIMIT  1
  )
;