Внутреннее соединение от одного до многих уникальных идентификаторов между двумя таблицами

#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 ? Я не могу придумать лучшего решения вашей проблемы.