Как использовать переменную set @ в mysql?

Я хочу установить список выбора как переменную и выполнить для него некоторую условную проверку:
Это мой код, который не работает:

set @temp = (select docId from table_1);
SELECT 
   id,
   CASE when id IN (@temp) then 'TRUE' else 'FALSE' end as visited
FROM table_2;

Также пробовал это:

set @temp = (select docId from table_1);
SELECT 
   id,
   CASE when (FIND_IN_SET(id,@temp)=1) then 'TRUE' else 'FALSE' end as visited
FROM table_2;

В обоих случаях посещенный столбец будет FALSE для каждой строки.

Почему бы просто не сделать: select docId from table_1

Madhur Bhaiya 09.04.2019 14:23

Мой фактический код отличается. Я использую эту функцию для выполнения какой-то задачи. Не все тут написал. Моя основная проблема заключается в этой задаче. Картина очень неясна, что именно происходит, когда я устанавливаю @variable.

lil-wolf 09.04.2019 15:03

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

Madhur Bhaiya 09.04.2019 15:04

@MadhurBhaiya Проверьте сейчас.

lil-wolf 09.04.2019 15:13
Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
4
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вместо этого вы можете использовать LEFT JOIN с GROUP BY. Объединение слева может привести к дублированию строк, соответствующих таблице_2 (поскольку может быть несколько строк для одного и того же значения id в таблице_1); чтобы справиться с этим, мы будем использовать Group By. Функция Count() может использоваться, чтобы определить, существует ли id в таблице_1 или нет, и, соответственно, определить ИСТИНА/ЛОЖЬ.

Попробуйте следующее:

SELECT 
   t2.id,
   CASE WHEN t1.docId IS NOT NULL THEN 'TRUE' ELSE 'FALSE' END AS visited
FROM table_2 t2
LEFT JOIN table_1 t1 ON t1.docId = t2.id 

СЛУЧАЙ, КОГДА t1.docId не равен нулю, ТОГДА «ИСТИНА», ИНАЧЕ «ЛОЖЬ» КОНЕЦ КАК посетил..... точно работает для меня.

lil-wolf 10.04.2019 12:14

Этот счетчик объединяет все строки в одну, что неверно.

lil-wolf 10.04.2019 12:15

@lil-wolf он будет сгруппирован по id, так что вы получите по одной строке на id. Это то, что ваш предыдущий запрос также должен достичь. Если ваше фактическое требование не отличается.

Madhur Bhaiya 10.04.2019 12:17

Но этот счет дает мне одну строку на «всю таблицу». Первый комментарий работает для меня. Левое соединение не будет дублировать идентификаторы. в любом случае я получаю одну строку для каждого идентификатора, присоединяясь к себе.

lil-wolf 10.04.2019 12:20

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