Хобрук: Ваш путь к мастерству в программировании

SQL-запрос Impala с 1 таблицей и поиск общего с 3 именами хостов

У меня есть одна таблица, и я пытаюсь получить имена хостов назначения, которые есть у всех пользователей, используя Impala SQL.

прокси-таблица:

sourcehostname destinationhostname
comp1          google.com
comp2          google.com
comp1          yahoo.com
comp1          facebook.com
comp2          facebook.com
comp3          facebook.com

Когда я запускаю следующее, чтобы вернуть разные имена хостов назначения из одной таблицы на 2 именах исходных хостов, это работает:

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2";

Он возвращает:

google.com и facebook.com

Я пытаюсь вернуть значения, где comp1 comp2 и comp3 имеют что-то общее, что было бы facebook.com, но я не могу правильно ответить на этот запрос:

SELECT DISTINCT t1.destinationhostname
FROM proxy_table t1 JOIN proxy_table t2 JOIN proxy_table t3
  ON t1.destinationhostname = t2.destinationhostname AND t1.sourcehostname  ="comp1" AND t2.sourcehostname="comp2" t3.sourcehostname = "comp3";

В запросе я хотел бы указать отдельные 3 компьютера, поскольку их тысячи, но я хочу выбрать только определенные.

08.02.2019

Ответы:


1

Используйте агрегацию. Предполагая, что нет повторяющихся строк:

select destinationhostname
from proxy_table 
group by destinationhostname
having count(*) = (select count(distinct sourcehostname) from proxy_table);

Если у вас могут быть повторяющиеся строки, просто измените having:

having count(distinct sourcehostname) = (select count(distinct sourcehostname) from proxy_table);

Если вам нужны ровно три пользователя, просто используйте = 3.

08.02.2019
  • Я не указал, но можете ли вы изменить этот запрос, чтобы я мог указать 3 пользователя? @Гордон Линофф 08.02.2019
  • @sectechguy . . . Я думаю, вы изменили вопрос после того, как я ответил на него. 08.02.2019

  • 2

    Можете ли вы попробовать ниже.

    SELECT DISTINCT t1.destinationhostname
    FROM proxy_table t1 JOIN proxy_table t2
    ON t1.destinationhostname = t2.destinationhostname 
    JOIN proxy_table t3
    ON t1.destinationhostname = t3.destinationhostname 
    and t2.destinationhostname = t3.destinationhostname 
    WHERE
    t1.sourcehostname  ="comp1" 
    AND t2.sourcehostname="comp2"
    AND t3.sourcehostname = "comp3";
    

    Дайте мне знать, если у вас возникнут проблемы

    08.02.2019
  • Это помогло? 08.02.2019
  • Новые материалы

    Декларативное и функциональное программирование в стиле LINQ с использованием JavaScript с использованием каррирования и генератора ...
    LINQ - одна из лучших функций C #, которая обеспечивает элегантный способ написания кода декларативного и функционального стиля, который легко читать и понимать. Благодаря таким функциям ES6,..

    Структуры данных в C ++ - Часть 1
    Реализация общих структур данных в C ++ C ++ - это расширение языка программирования C, которое поддерживает создание классов, поэтому оно известно как C с классами . Он используется для..

    Как я опубликовал свое первое приложение в App Store в 13 лет
    Как все началось Все началось три года назад летом после моего четвертого класса в начальной школе. Для меня, четвертого класса, лето кажется бесконечным, пока оно не закончится, и мой отец..

    Что в лицо
    Очерк о возвращении физиогномики и о том, почему мы должны это приветствовать. История начинается со странной науки. Р. Тора Бьорнсдоттир, Николас О. Рул. Видимость социального класса по..

    Почему шаблоны проектирования и почему нет?
    Сложность — мать всех проблем в программировании. Программное обеспечение должно быть разработано с точки зрения того, кто его поддерживает, а не того, кто его пишет, потому что программное..

    Создание дизайна обуви с помощью машинного обучения
    Обувь. Что подождать? Я думал, что речь пойдет о машинном обучении! Ну это так. Если бы вы пошли на Amazon, сколько обуви вы бы нашли? Наверное, много, не так ли? Но много ли в них..

    GraalVM в 2022 году: итоги года
    2022 год был очень продуктивным для проекта и сообщества GraalVM. Вместе мы разработали множество новых функций, выпустили GraalVM для последних версий Java и новых платформ и увидели несколько..