2012-10-09 32 views
4

我想用一个子查询MySQL的 - 在FROM子句

CREATE OR REPLACE VIEW `V_TASK_TRANSFER` (`REF_ID`, `DATE_CREATE`, `DATE_TRX`, 
    `ACCOUNT_NO`, `TO_ACCOUNT_NO`, `TO_NAME`, `CURRENCY_CODE`, `AMOUNT`, 
    `TASK_TYPE`, `NAME_E`, `NAME_I`, `REF_NO`, `EXECUTION_TYPE`, 
    `REVIEW_COUNT`, `REVIEW_NEED`, `APPROVE_COUNT`, `APPROVE_NEED`, 
    `TRX_COUNT_SUCCESS`, `TRX_COUNT_FAIL`, `TRX_COUNT_ALL`, 
    `STATUS_TF`, `USER_ID` 
) AS 
    SELECT REF_ID, 
    DATE_CREATE, 
    DATE_TRX, 
    ACCOUNT_NO, 
    TO_ACCOUNT_NO, 
    TO_NAME, 
    CURRENCY_CODE, 
    AMOUNT, 
    TASK_TYPE, 
    NAME_E, 
    NAME_I, 
    REF_NO, 
    EXECUTION_TYPE, 
    REVIEW_COUNT, 
    REVIEW_NEED, 
    APPROVE_COUNT, 
    APPROVE_NEED, 
    TRX_COUNT_SUCCESS, 
    TRX_COUNT_FAIL, 
    TRX_COUNT_ALL, 
    STATUS_TF, 
    USER_ID 
    FROM 
    (SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE 
    UNION 
    SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS_DOM TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE 
    UNION 
    SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS_FGN TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE 
    ); 

创建视图在MySQL中创建一个使用子查询的看法,但它给了我

错误#1349 - 视图的SELECT语句包含在子查询FROM子句

我该如何解决这个限制?

回答

3

尝试做无子查询 -

CREATE OR REPLACE VIEW V_TASK_TRANSFER AS 
    SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE 
    UNION 
    SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS_DOM TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE 
    UNION 
    SELECT T.REF_ID, 
     T.DATE_CREATE, 
     T.DATE_TRX, 
     TTF.ACCOUNT_NO, 
     TTF.TO_ACCOUNT_NO, 
     TTF.TO_NAME, 
     TTF.CURRENCY_CODE, 
     TTF.AMOUNT, 
     T.TASK_TYPE, 
     TT.NAME_E, 
     TT.NAME_I, 
     T.REF_NO, 
     T.EXECUTION_TYPE, 
     T.REVIEW_COUNT, 
     T.REVIEW_NEED, 
     T.APPROVE_COUNT, 
     T.APPROVE_NEED, 
     T.TRX_COUNT_SUCCESS, 
     T.TRX_COUNT_FAIL, 
     T.TRX_COUNT_ALL, 
     T.STATUS_TF, 
     T.USER_ID 
    FROM IB_TASKS T 
    JOIN IB_TASK_TRANSFERS_FGN TTF ON T.REF_ID = TTF.REF_ID 
    JOIN IB_TASK_TYPES TT ON TT.TASK_TYPE = T.TASK_TYPE; 
+0

感谢队友:d这是真正的帮助..即时通讯在MySQL新手 –

5

按照文档:

MySQL Docs

  • SELECT语句不能包含一个子查询在FROM子句中。

您的解决方法是为每个子查询创建一个视图。

然后在最终视图中访问子查询的那些视图。

See solution to it