СУЩЕСТВУЕТ Sintaxe - MySQL - не фильтрует регистр не в обоих запросах - PullRequest
0 голосов
/ 13 ноября 2018
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)

1 Ответ

0 голосов
/ 13 ноября 2018

Подзапрос в 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 , чтобы узнать о других способах поиска идентификаторов, имеющих все несколько значений в столбце.

...