Заявление о случае со сравнением

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

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

Расскажите, пожалуйста, подробнее о том, чего вы здесь пытаетесь достичь?

Madhur Bhaiya 04.09.2018 13:59

полезны образцы данных и вывод

Zaynul Abadin Tuhin 04.09.2018 14:05

Отступы имеют значение для такого кода, то, что вы вставили сюда, чрезвычайно трудно читать. Поэтому я изменил макет, чтобы он был более читабельным.

MatBailie 04.09.2018 14:26

Ваш "вопрос" не описывает, с какими проблемами вы сталкиваетесь, или на самом деле Задайте вопрос ... Почему то, что вы нам показываете, не работает? Что он должен делать и что он делает на самом деле? Можете ли вы продемонстрировать проблему на примерах? stackoverflow.com/help/mcve

MatBailie 04.09.2018 14:31

@MatBailie Проблема, с которой я столкнулся, заключается в том, что не совпадает частичное совпадение идентификатора

Sandeep Sandy 04.09.2018 14:43
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
5
78
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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;

Другие вопросы по теме