首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问联接中的外部表数据

如何访问联接中的外部表数据
EN

Stack Overflow用户
提问于 2018-04-30 17:18:42
回答 1查看 50关注 0票数 0

如何在SELECT中访问外部表中的数据,并在联接estructure中的WHERE中使用它?

下面是当前的查询:

代码语言:javascript
复制
    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

代码语言:javascript
复制
WHERE
    var.disponibilidade = 1
    AND(
        ctp_1.codigo = 'tamanho' AND cvl_1.valor IN('p')
    )

本节如下:

代码语言:javascript
复制
WHERE
    var.disponibilidade = 1
    AND(
        (ctp.codigo != 'tamanho' AND ctp_1.codigo = 'tamanho' AND cvl_1.valor IN('p'))
        OR
        (ctp.codigo = 'tamanho')
    )
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-30 17:26:49

不可能从内联视图查询内部引用外部查询中的列。

在MySQL venacular中,内联视图查询称为“派生表”。这个名字是有意义的,因为MySQL处理它的方式。执行计划首先将内联视图查询具体化为临时(-ish)表。一旦完成,外部查询就可以运行,引用派生表的内容。

在内联视图查询运行时,MySQL没有外部查询中的列。

可以在子查询中引用外部查询中的列,例如在SELECT列表中或WHERE子句中。我们将引用外部查询中的列的子查询称为“关联子查询”。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50105263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档