View's SELECT contains a subquery in the FROM clause

后端 未结 4 902
走了就别回头了
走了就别回头了 2020-11-28 08:41

I have two tables and I need to create a view. The tables are:

credit_orders(id, client_id, number_of_credits, payment_status)
credit_usage(id, client_id, cr         


        
相关标签:
4条回答
  • 2020-11-28 09:30

    As per documentation:

    MySQL Docs

    • The SELECT statement cannot contain a subquery in the FROM clause.

    Your workaround would be to create a view for each of your subqueries.

    Then access those views from within your view view_credit_status

    0 讨论(0)
  • 2020-11-28 09:32

    Looks to me as MySQL 3.6 gives the following error while MySQL 3.7 no longer errors out. I am yet to find anything in the documentation regarding this fix.

    0 讨论(0)
  • 2020-11-28 09:39
    create view view_clients_credit_usage as
        select client_id, sum(credits_used) as credits_used 
        from credit_usage 
        group by client_id
    
    create view view_credit_status as 
        select 
            credit_orders.client_id, 
            sum(credit_orders.number_of_credits) as purchased, 
            ifnull(t1.credits_used,0) as used 
        from credit_orders
        left outer join view_clients_credit_usage as t1 on t1.client_id = credit_orders.client_id
        where credit_orders.payment_status='Paid'
        group by credit_orders.client_id)
    
    0 讨论(0)
  • 2020-11-28 09:44

    As the more recent MySQL documentation on view restrictions says:

    Before MySQL 5.7.7, subqueries cannot be used in the FROM clause of a view.

    This means, that choosing a MySQL v5.7.7 or newer or upgrading the existing MySQL instance to such a version, would remove this restriction on views completely.

    However, if you have a current production MySQL version that is earlier than v5.7.7, then the removal of this restriction on views should only be one of the criteria being assessed while making a decision as to upgrade or not. Using the workaround techniques described in the other answers may be a more viable solution - at least on the shorter run.

    0 讨论(0)
提交回复
热议问题