簡體   English   中英

SQL內部查詢WHERE子句訪問外部查詢表

[英]SQL Inner Query WHERE clause access to Outer Query tables

早上好 -

這是我在這里的第一篇文章,經過多年使用SO作為一個非常有用的資源。

我遇到了一個復雜(對我來說)查詢的問題,我正在為一個運行woocommerce的wordpress網站一起處理訂單。 我正在嘗試在訂單列表中添加過濾器,該過濾器過濾包含特定產品類別中的產品的訂單。

我擔心這個查詢會加入內部查詢的各種元表,以獲取我需要的信息以確定產品的類別。

問題是我無法使范圍規則工作,以便在內部查詢中訪問所需的外部表信息。

查詢是:

    SELECT SQL_CALC_FOUND_ROWS
        wp_ot6q6i_posts.ID
    FROM
        wp_ot6q6i_posts
    WHERE
        1 = 1 AND YEAR(wp_ot6q6i_posts.post_date) = 2015 AND MONTH(wp_ot6q6i_posts.post_date) = 12 AND wp_ot6q6i_posts.post_type = 'shop_order' AND(
            (
                wp_ot6q6i_posts.post_status = 'wc-pending' OR wp_ot6q6i_posts.post_status = 'wc-processing' OR wp_ot6q6i_posts.post_status = 'wc-on-hold' OR wp_ot6q6i_posts.post_status = 'wc-completed' OR wp_ot6q6i_posts.post_status = 'wc-cancelled' OR wp_ot6q6i_posts.post_status = 'wc-refunded' OR wp_ot6q6i_posts.post_status = 'wc-failed'
            )
        ) AND EXISTS(
        SELECT
            t2.PROD_ID
        FROM
            (
            SELECT
                wp_ot6q6i_woocommerce_order_itemmeta.meta_value AS PROD_ID
            FROM
                wp_ot6q6i_woocommerce_order_items
            LEFT JOIN
                wp_ot6q6i_woocommerce_order_itemmeta
            ON
                wp_ot6q6i_woocommerce_order_itemmeta.order_item_id = wp_ot6q6i_woocommerce_order_items.order_item_id
            WHERE
                wp_ot6q6i_woocommerce_order_items.order_item_type = 'line_item' AND wp_ot6q6i_woocommerce_order_itemmeta.meta_key = '_product_id' AND wp_ot6q6i_posts.ID = wp_ot6q6i_woocommerce_order_items.order_id
        ) t1
    INNER JOIN
        (
        SELECT DISTINCT
            wposts.ID AS PROD_ID
        FROM
            wp_ot6q6i_posts wposts
        LEFT JOIN
            wp_ot6q6i_postmeta wpostmeta
        ON
            wposts.ID = wpostmeta.post_id
        LEFT JOIN
            wp_ot6q6i_term_relationships
        ON
            (
                wposts.ID = wp_ot6q6i_term_relationships.object_id
            )
        LEFT JOIN
            wp_ot6q6i_term_taxonomy
        ON
            (
                wp_ot6q6i_term_relationships.term_taxonomy_id = wp_ot6q6i_term_taxonomy.term_taxonomy_id
            )
        WHERE
            wp_ot6q6i_term_taxonomy.taxonomy = 'product_cat' AND wp_ot6q6i_term_taxonomy.term_id IN(
            SELECT
                term_id
            FROM
                `wp_ot6q6i_terms`
            WHERE
                slug = 'preorder'
        )
    ORDER BY
        wpostmeta.meta_value
    ) t2
    ON
        t1.PROD_ID = t2.PROD_ID
    )
    ORDER BY
        wp_ot6q6i_posts.post_date
    DESC
    LIMIT 0, 20

而我得到的錯誤是:

1054 - 'where子句'中的未知列'wp_ot6q6i_posts.ID'

感謝你的幫助。 我最終朝不同的方向去解決這個問題,一個我更喜歡作為開發人員...我從最后一個連接中拉出固定的項目列表並在具有一系列的一系列代碼中構建查詢在where子句中進行更簡單的查詢,從而避免了整個Exists方法。

再次感謝你的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM