簡體   English   中英

如何在join中訪問外部表數據

[英]How to access outer table data in join where

如何在SELECT中從外部表訪問數據,並在JOIN estructure中的WHERE中使用它?

以下是當前查詢:

    SELECT
        cvl.id caracteristica_valor_id,
        cvl.nome caracteristica_valor_nome,
        cvl.valor caracteristica_valor_valor,
        ctp.id caracteristica_tipo_id,
        ctp.nome caracteristica_tipo_nome,
        ctp.codigo caracteristica_tipo_codigo,
        ctp.tipo caracteristica_tipo_tipo,
        COUNT(DISTINCT var.id_perfil_produto) quantidade_itens
    FROM
        caracteristica_variacao cvr
    INNER JOIN caracteristica_valor cvl ON  cvl.id = cvr.id_caracteristica_valor
    INNER JOIN caracteristica_tipo ctp ON ctp.id = cvl.id_caracteristica_tipo
    INNER JOIN variacao var ON var.id = cvr.id_variacao
    INNER JOIN(
        SELECT DISTINCT
            ppr.id perfil_produto_id
        FROM
            perfil_produto ppr
        INNER JOIN produto pro ON pro.id = ppr.id_produto
        INNER JOIN(
            SELECT ppr2.id AS id_perfil_sub,a
                COUNT(var.id) AS qtd_variacoes,
                SUM(var.quantidade_estoque) AS quantidade_estoque,
                COALESCE(SUM(var.quantidade_estoque_reservada),0) AS quantidade_estoque_reservada,
                MIN(var.disponibilidade) AS disponibilidade,
                MIN(var.frete_gratis) AS frete_gratis,
                MIN(var.preco_venda) AS preco_venda,
                MAX(var.preco_listagem) AS preco_listagem
            FROM
                variacao var
            LEFT JOIN perfil_produto ppr2 ON ppr2.id = var.id_perfil_produto
            LEFT JOIN caracteristica_variacao cvr_1 ON cvr_1.id_variacao = var.id
            LEFT JOIN caracteristica_valor cvl_1 ON cvl_1.id = cvr_1.id_caracteristica_valor
            LEFT JOIN caracteristica_tipo ctp_1 ON ctp_1.id = cvl_1.id_caracteristica_tipo
            WHERE
                var.disponibilidade = 1
                AND(
                    ctp_1.codigo = 'tamanho' AND cvl_1.valor IN('p')
                )
            GROUP BY
                ppr2.id
        ) AS grp_var ON grp_var.id_perfil_sub = ppr.id
        INNER JOIN produto_categoria prc ON pro.id = prc.produto_id
        INNER JOIN categoria cat ON prc.categoria_id = cat.id
        WHERE
            pro.disponibilidade = 1 AND prc.categoria_id IN (164, 165, 166)
     ) AS produto ON produto.perfil_produto_id = var.id_perfil_produto
    GROUP BY
        cvl.id
    ORDER BY
        ctp.tipo ASC,
        ctp.id

我需要在ctp.codigo部分外部表中的字段ctp.codigo

WHERE
    var.disponibilidade = 1
    AND(
        ctp_1.codigo = 'tamanho' AND cvl_1.valor IN('p')
    )

對於本節如下:

WHERE
    var.disponibilidade = 1
    AND(
        (ctp.codigo != 'tamanho' AND ctp_1.codigo = 'tamanho' AND cvl_1.valor IN('p'))
        OR
        (ctp.codigo = 'tamanho')
    )

不可能從內聯視圖查詢內部引用外部查詢中的列。

在MySQL術語中,內聯視圖查詢稱為“派生表”。 這個名稱很有意義,因為MySQL處理它的方式。 執行計划首先將內聯視圖查詢具體化為一個臨時(-ish)表。 完成此操作后,便可以運行外部查詢,並引用派生表的內容。

內聯視圖查詢運行時,MySQL沒有外部查詢中的列可用。


可以在子查詢中引用外部查詢中的列,該子查詢例如出現在SELECT列表或WHERE子句中。 我們將引用外部查詢中的列的子查詢稱為“相關子查詢”。

暫無
暫無

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

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