Изложение случая со сравнением - PullRequest
0 голосов
/ 04 сентября 2018

В существующем утверждении ниже я сравниваю host_name и ip_adress с записями, извлеченными из другой таблицы, и помечаю столбец как true, когда найден, но я бы хотел настроить его, чтобы получить истинный результат, когда host_name также является частью идентификатора из полученной записи * 1001 то есть *

host_name=abc
identifier=abc.google.com should also be true

CASE
    WHEN
        (
            (`inv_y`.`host_name` <> '')
            AND
            `inv_y`.`host_name` IN (SELECT `inv_x`.`identifier`
                                      FROM `inv_x`
                                  ORDER BY `inv_x`.`creation_date` DESC
                                   )
        )
        OR
        (
            (`inv_y`.`ip_address` <> '')
            AND
            inv_y`.`ip_address` IN (SELECT `inv_x`.`identifier`
                                      FROM `inv_x`
                                  ORDER BY `inv_x`.`creation_date` DESC
                                   )
        )
    THEN
        'True'
    ELSE
        'False'
END

1 Ответ

0 голосов
/ 04 сентября 2018

Похоже, вы могли бы извлечь выгоду из функции EXISTS. Может работать что-то вроде следующего:

SELECT CASE WHEN EXISTS(SELECT 1 
          FROM inv_y 
          WHERE (ip IN (SELECT identifier 
                       FROM inv_x)
          OR hostname IN (SELECT identifier 
                       FROM inv_x))
          AND hostname LIKE '%eb%'
         ) = 1 THEN "True"
  ELSE "False"
END AS Present;

Вот демонстрация этой работы: SQL Fiddle

Обратите внимание, что вышеизложенное можно еще больше упростить, если вы можете работать с 1 или 0 вместо true или false. EXISTS возвращает 1, если строка найдена, и 0, если нет, и CASE существует просто для перевода этого значения в «True» или «False», так что вы можете просто получить следующее:

SELECT EXISTS(SELECT 1 
              FROM inv_y 
              WHERE (ip IN (SELECT identifier 
                            FROM inv_x)
                OR hostname IN (SELECT identifier 
                                FROM inv_x)
              )
              AND hostname LIKE '%eb%') AS Present;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...