Следующий запрос mysql

select * from PrivateData.Table1 AS m 
LEFT JOIN 
PrivateData.Table2 AS i 
ON m.GUID = i.OutId;

Отлично работает, пока этот запрос:

delete m,i from PrivateData.Table1 AS m 
LEFT JOIN 
PrivateData.Table2 AS i 
ON m.GUID = i.OutId;

Выдает ошибку:

ОШИБКА 1046 (3D000): база данных не выбрана

Почему так? Как иначе я могу удалить выбранные строки из таблиц?

P.S .: Я не разбираюсь в запросах mysql.

0
Alex 27 Мар 2014 в 13:04
Ваш синтаксис запроса delete неверен, он должен быть: delete from ....
 – 
sp00m
27 Мар 2014 в 13:07
Эта ошибка означает, что вы не выбрали базу данных... Вроде очевидно :) В вашем подключении вы пропустили там use DATABASENAME.
 – 
Martijn
27 Мар 2014 в 13:19
@Martijn: в моем первом запросе нет оператора use DATABASENAME, который возвращает список записей без ошибок.
 – 
Alex
27 Мар 2014 в 13:21
@Martijn: № утверждений показывает, что таблицы взяты из базы данных PrivateData. Явный вызов use database не требуется. Ошибка где-то в другом месте.
 – 
Ravinder Reddy
27 Мар 2014 в 13:21
В заголовке вашего сообщения написано Unknown column ошибка? Если это так, Table1.GUID или Table2.OutId должны быть неправильными.
 – 
Ravinder Reddy
27 Мар 2014 в 13:25

3 ответа

Лучший ответ

Я не уверен, имеет ли это отношение к вопросу, но стоит попробовать. Из документации:

Для ссылок на псевдонимы в списке таблиц, из которых удаляются строки при удалении нескольких таблиц, используется база данных по умолчанию, если она не указана явно. Например, если база данных по умолчанию - db1, следующий оператор не работает, потому что неквалифицированная ссылка на псевдоним a2 интерпретируется как имеющая базу данных db1:

DELETE a1, a2 FROM db1.t1 AS a1 INNER JOIN db2.t2 AS a2
WHERE a1.id=a2.id;

Чтобы правильно сопоставить псевдоним, который ссылается на таблицу вне базы данных по умолчанию, вы должны явно указать ссылку с именем соответствующей базы данных:

DELETE a1, db2.a2 FROM db1.t1 AS a1
INNER JOIN db2.t2 AS a2
WHERE a1.id=a2.id;

Попробуйте явно указать вашу базу данных:

delete PrivateData.m, PrivateData.i from PrivateData.Table1 AS m 
LEFT JOIN 
PrivateData.Table2 AS i 
ON m.GUID = i.OutId;
1
sybear 27 Мар 2014 в 13:39
Это выглядит разумным объяснением. И ваш предложенный запрос работает. Большое спасибо.
 – 
Alex
27 Мар 2014 в 13:41

Небольшие модификации будут работать

delete from m,i using PrivateData.Table1 AS m LEFT JOIN PrivateData.Table2 AS i ON m.GUID = i.OutId;
0
avisheks 27 Мар 2014 в 13:11
Я получаю ERROR 1046 (3D000): No database selected
 – 
Alex
27 Мар 2014 в 13:12

ОШИБКА MySQL 1046 (3D000): база данных не выбрана:

простой:

Вам необходимо указать MySQL, какую базу данных использовать:

USE database_name;

перед созданием таблицы.

Если база данных не существует, вам необходимо создать ее как:

CREATE DATABASE database_name;

, за которым следует:

USE database_name;

Еще одно: с кратким примером

Когда я пытался просмотреть таблицы в данной базе данных, я обнаружил указанную выше ошибку. Когда вы подключаетесь к серверу MySQL, он не выбирает для вас базу данных, если вы явно не укажете ее.

Если вы только используете,

mysql --userusername --passwordpassword
or
mysql -uusername -ppassword

клиент MySQL просто подключается к серверу базы данных. После этого вам нужно будет указать имя базы данных, которую вы собираетесь использовать:

use database_name

Если вам не нравится описанный выше метод, вы можете напрямую указать базу данных только при запуске.

Синтаксис для этого же:

mysql -uusername -ppassword database_name

For ex., mysql –ugaurav –pchhabra testdb

щелкните для sqlfiddle

look here

0
jmail 27 Мар 2014 в 13:55
Это не объясняет, почему первый запрос выполняется без проблем, без предварительного выбора базы данных.
 – 
Alex
27 Мар 2014 в 13:24