exists-sintaxe-mysql-不在这两个查询中过滤register-not

pzfprimi  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(362)
SELECT
    sys.tbl_unidades.nome_unidade 'name',
    sys.tbl_unidades.id_unidade 'value'
FROM
    sys.tbl_unidades,
    sys.tbl_unidades_contratos
WHERE
    sys.tbl_unidades.id_unidade = sys.tbl_unidades_contratos.id_unidade
    AND sys.tbl_unidades.dt_fim IS NULL
    AND sys.tbl_unidades_contratos.id_contrato = 10

    AND EXISTS 

        (SELECT
            sys.tbl_unidades.nome_unidade 'name',
            sys.tbl_unidades.id_unidade 'value'
        FROM
            sys.tbl_unidades,
            sys.tbl_unidades_contratos
        WHERE
            sys.tbl_unidades.id_unidade = sys.tbl_unidades_contratos.id_unidade
            AND sys.tbl_unidades.dt_fim IS NULL
            AND sys.tbl_unidades_contratos.id_contrato =11)
fnatzsnv

fnatzsnv1#

中的子查询 EXISTS 与主查询不相关。所以它只是检查子查询是否返回任何行,而不是它们是否有相同的行 nome_unidade 以及 id_unidade 作为主查询。

SELECT
    u1.nome_unidade 'name',
    u1.id_unidade 'value'
FROM
    sys.tbl_unidades AS u1
JOIN 
    sys.tbl_unidades_contratos AS c1
ON u1.id_unidade = c1.id_unidade
WHERE
    u1.dt_fim IS NULL
    AND c1.id_contrato = 10

    AND EXISTS 

        (SELECT 1                
        FROM
            sys.tbl_unidades AS u2
        JOIN
            sys.tbl_unidades_contratos AS c2
        ON u2.id_unidade = c2.id_unidade
        WHERE
            u2.dt_fim IS NULL
            AND c2.id_contrato = 11
            AND u2.id_unidade = u1.id_unidade)

我怀疑在子查询中不需要两个表,只需要检查 tbl_unidades_contratos .
另请参阅如何在mysql中返回具有相同列值的行,以了解查找列中具有所有多个值的id的其他方法。

相关问题