Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
ERROR 1064 (Stas) 28/03/2002 - 15:49:37
      Re: ERROR 1064 (dim-dim) 28/03/2002 - 16:28:57
      Re: Вложенные запросы (RXL) 30/03/2002 - 01:59:09
      Re: Где это в мануале? (Василий) 01/04/2002 - 13:30:58
      Re: ERROR 1064 (Владимир) 01/04/2002 - 18:23:55
      Re: ERROR 1064 (ZeNoN) 10/05/2006 - 17:42:36

> Original message text:
> From: Stas - 28/03/2002 - 15:49:37
> Subject:ERROR 1064
> -----------------
> По Граберу в упражнении:
> SELECT *
> FROM orders
> WHERE snum
> ( SELECT snum
> from salespeople
> where sname="Motika' ) ;
> Выдаёт :ERROR 1064: You have an error in your SQL syntax near
> 'SELECT snum from salespeople where sname="Motika' )'at line 4
> В чём проблема?????
>


From: Василий - 01/04/2002 - 13:30:58
Subject:Где это в мануале?
-----------------
Я только вот что нашел

1.4.4.1 Sub-selects

MySQL currently only supports sub selects of the form INSERT ... SELECT ... and REPLACE ... SELECT .... You can however use the function IN() in other contexts.

In many cases you can rewrite the query without a sub-select:

SELECT * FROM table1 WHERE id IN (SELECT id FROM table2);

This can be re-written as:

SELECT table1.* FROM table1,table2 WHERE table1.id=table2.id;

The queries:

SELECT * FROM table1 WHERE id NOT IN (SELECT id FROM table2);
SELECT * FROM table1 WHERE NOT EXISTS (SELECT id FROM table2 where table1.id=table2.id);

Can be rewritten as:

SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id IS NULL

For more complicated subqueries you can often create temporary tables to hold the subquery. In some cases, however this option will not work. The most frequently encountered of these cases arises with DELETE statements, for which standard SQL does not support joins (except in sub-selects). For this situation there are two options available until subqueries are supported by MySQL.

The first option is to use a procedural programming language (such as Perl or PHP) to submit a SELECT query to obtain the primary keys for the records to be deleted, and then use these values to construct the DELETE statement (DELETE FROM ... WHERE ... IN (key1, key2, ...)).

The second option is to use interactive SQL to contruct a set of DELETE statements automatically, using the MySQL extension CONCAT() (in lieu of the standard || operator). For example:

SELECT CONCAT('DELETE FROM tab1 WHERE pkid = ', tab1.pkid, ';')
FROM tab1, tab2
WHERE tab1.col1 = tab2.col2;

You can place this query in a script file and redirect input from it to the mysql command-line interpreter, piping its output back to a second instance of the interpreter:

prompt> mysql --skip-column-names mydb < myscript.sql | mysql mydb

MySQL 4.0 supports multi-table deletes that can be used to efficiently delete rows based on information from one table or even from many tables at the same time.


а у меня, соотв, 4.0.0

mysql> status
--------------
C:\mysql\bin\mysql.exe Ver 11.16 Distrib 4.0.0-alpha, for Win95/Win98 (i32)
-
-
-
Server version: 4.0.0-alpha-nt
Protocol version: 10
-
-
-



[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
27766



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |