#mysql #sql #postgresql
Вопрос:
одна таблица t1 имеет один уникальный идентификатор u1
другая таблица t2 имеет три уникальных идентификатора u2a, u2b, u2c
Как сделать внутреннее соединение между двумя таблицами, чтобы u1 таблицы t1 присоединился к u2a, u2b или u2c таблицы t2.
Комментарии:
1. Помечайте только ту базу данных, которую вы используете.
2. Похоже, что ошибка проектирования базы данных теперь вызывает у вас некоторые проблемы
3. Почему в результатах нет «ram usa» и «mohan usa»? Если вам нужно включить только одно имя, добавьте правила для включения только одного, если существует несколько совпадений. Кроме того, почему «чирс Индия» не включена в список?
4. @DanGuzman Спасибо вам за ваш ответ. прошу прощения, я изменил выходные таблицы
Ответ №1:
Я не думаю, что это лучшая практика, но попробуйте:
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2a
union
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2b
union
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2c;
Демо: https://www.db-fiddle.com/f/7yUJcuMJPncBBnrExKbzYz/116
Если вы хотите, чтобы имя было в порядке, вы можете добавить order by name desc;
его в конце запроса.
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2a
union
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2b
union
select t1.name,t2.country
from table1 t1
inner join table2 t2
on t1.u1=t2.u2c
order by name desc;
Комментарии:
1. Спасибо, Эргест за быстрое решение. Есть ли у нас в SQL какая-либо функция, которая соответствует 1,2 или 3 в одной строке
2. например,» где u1 соответствует либо u2a, u2b,u2c». можем ли мы использовать функцию «содержать» или «нравится» здесь
3. @kundankaushik, вы спрашиваете, не используя
union
? Я не могу придумать лучшего решения вашей проблемы.