#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