Объединить два столбца из разных строк таблицы с использованием mysql

#mysql #sql

#mysql #sql

Вопрос:

У меня есть таблицы Student

  --------------
| Name | Grade |
 --------------
 --------------
| John |  A    |
 --------------
| Tina |  B    |
 --------------
  

И введите

 
 --------------
| Type | Class |
 --------------
 --------------
| Good |  12   |
 --------------
| Avg  |  11   |
 --------------
  

Теперь я хочу получить результат, объединив их по строкам, чтобы результат SQL-запроса был,

  -----------------------------
| Name | Grade | Type | Class |
 -----------------------------
| John |  A    | Good |  12   |
 -----------------------------
| Tine |  B    | Avg  |  11   |
 -----------------------------
  

Комментарии:

1. Есть ли какие-либо столбцы, которые связывают две таблицы? Какую версию MySQL вы используете?

2. Вам нужна связь от Student к Type, чтобы получить хорошее и надежное слияние.

3. Нет никакой связи. Вот почему я сказал объединение по строкам.

Ответ №1:

Предполагая, что в каждой таблице одинаковое количество столбцов, вы можете связать их по номеру строки. Без ORDER BY предложения, хотя нумерация строк неопределенна, и вы не можете гарантировать результаты.

В MySQL 5.7 и ниже:

 SELECT Name, Grade, Type, Class
FROM (SELECT *, @rownum := @rownum   1 AS rownum
      FROM Student
      CROSS JOIN (SELECT @rownum := 0) r
      ) s
JOIN (SELECT *, @rownum2 := @rownum2   1 AS rownum
      FROM Type
      CROSS JOIN (SELECT @rownum2 := 0) r
      ) t ON t.rownum = s.rownum
  

В MySQL 8.0 и выше:

 SELECT Name, Grade, Type, Class
FROM (SELECT *, ROW_NUMBER() OVER () AS rownum
      FROM Student) s
JOIN (SELECT *, ROW_NUMBER() OVER () rownum
      FROM Type) t ON t.rownum = s.rownum
  

Вывод:

 Name    Grade   Type    Class
John    A       Good    12
Tina    B       Avg     11
  

Демонстрация на dbfiddle