Запрос, чтобы получить идентификаторы, которые находятся только в одном месте или оба - PullRequest
0 голосов
/ 05 декабря 2018

Как мне получить идентификаторы из этой простой таблицы, которые находятся как в точках A и B, так и только в A или B

enter image description here

пример результата: a22 уникален для местоположения A, только a23 находится как в A, так и в B и т. д.

Ответы [ 3 ]

0 голосов
/ 05 декабря 2018

Мы можем попробовать следующий запрос, чтобы найти те id, которые имеют оба местоположения:

SELECT id
FROM yourTable
WHERE location IN ('A', 'B')
GROUP BY id
HAVING MIN(location) <> MAX(location);

Чтобы найти те id, имеющие только местоположение A:

SELECT id
FROM yourTable
GROUP BY id
HAVING MIN(location) = MAX(location) AND MIN(location) = 'A';

Вышеуказанные запросы написаны так, чтобы мы могли разместить индекс на (id, location).MySQL должен иметь возможность использовать этот индекс для обоих запросов.

0 голосов
/ 05 декабря 2018

Вот что я придумал:

SELECT unique_id
    ,count(unique_id)
FROM (
    SELECT a.id AS locationA
        ,b.id AS locationB
        ,CASE WHEN locationA IS NULL THEN 'onlyb' WHEN locationB IS NULL THEN 'onlya' ELSE 'both' END AS unique_id
    FROM (
        SELECT DISTINCT id
            ,location
        FROM table
        WHERE 1 = 1
            AND location = 'A'
        ) a
    FULL JOIN (
        SELECT DISTINCT id
            ,location
        FROM table
        WHERE 1 = 1
            AND location = 'B'
        ) b ON a.id = b.id
    )
GROUP BY id
0 голосов
/ 05 декабря 2018

Чтобы получить идентификаторы, которые находятся в обоих местах

select id
from your_table
where location in ('A','B')
group by id
having count(distinct location) = 2

Чтобы получить уникальные идентификаторы

select id
from your_table
group by id
having count(distinct location) = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...