#mysql
#mysql
Вопрос:
Я создал 2 таблицы A и B, как показано ниже :
A B
Name Name
Burger Avocado
Beef Crab
Potato. Pizza
Я хочу создать список, который возвращает имена в 2 таблицах, длина которых> 5, используя только 1 оператор.
Мой код :
SELECT A.Name,B.Name
INTO LIST
FROM A,B
WHERE LENGTH(A.Name)>5 AND LENGTH(B.Name)>5;
Ошибка: список необъявленных переменных.
Мой вопрос в том, как я могу объявить СПИСОК, но по-прежнему использовать только 1 оператор для этого вопроса.
Спасибо
Ответ №1:
MySQL не поддерживает SELECT INTO
. Если список таблиц уже создан, я думаю, что вам нужно:
INSERT INTO LIST
SELECT Name FROM A WHERE LENGTH(Name) > 5
UNION
SELECT Name FROM B WHERE LENGTH(Name) > 5;
Если список таблиц еще не существует, вы могли бы сделать:
CREATE TABLE LIST
AS
SELECT Name FROM A WHERE LENGTH(Name) > 5
UNION
SELECT Name FROM B WHERE LENGTH(Name) > 5;
Комментарии:
1. Спасибо Рабат. В любом случае мы можем получить список только в 1 операторе? Я думаю, что Create и Select — это 2 оператора. Этот вопрос взят из моего экзамена, в котором запрашивается код только в 1 операторе. Спасибо
2.
SELECT DISTINCT on data set selected by UNION
это неправильный путь.3. @Spoonfed Если вам нужен только список, и его не нужно материализовывать в таблицу, просто используйте часть запроса select . Имеет ли это смысл?
4. На самом деле ОБЪЕДИНЕНИЕ по умолчанию выполняется DISTINCT . ОБЪЕДИНЕНИЕ ALL — это тот, который этого не делает. Я обновил, чтобы упростить запрос.
Ответ №2:
Вы можете попробовать выполнить этот запрос:
CREATE TEMPORARY TABLE LIST
SELECT Name FROM A WHERE LENGTH(Name) > 5
UNION
SELECT Name FROM B WHERE LENGTH(Name) > 5
;
Этот запрос создаст временную таблицу LIST
из результата, полученного от запроса.
Если у вас уже есть таблица LIST
и вам нужно вставить данные в таблицу — запустите следующий запрос:
INSERT INTO LIST
SELECT Name FROM A WHERE LENGTH(Name) > 5
UNION
SELECT Name FROM B WHERE LENGTH(Name) > 5
;
КСТАТИ
возвращает имена в 2 таблицах, длина которых> 5
для этого вы должны использовать UNION
, иначе ваш результат будет выглядеть так:
SELECT A.Name, B.Name
FROM A,B
WHERE LENGTH(A.Name)>5 AND LENGTH(B.Name)>5;
-------- ---------
| Name | Name |
-------- ---------
| Burger | Avocado |
| Potato | Avocado |
-------- ---------
Но, похоже, вам нужно что-то вроде:
select * from LIST;
---------
| Name |
---------
| Burger |
| Potato |
| Avocado |
---------
Комментарии:
1. Спасибо Владимир! Можем ли мы в любом случае вернуть такой список только в 1 операторе? Поскольку в моем экзаменационном вопросе запрашивается только 1 оператор, но кажется, что Create и Select — это 2 оператора.
2. В случае, если у вас уже есть таблица
LIST
, которую вам нужно запуститьINSERT INTO LIST SELECT ...
, я обновил свой ответ, чтобы вы могли видеть весь запрос.