Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > субконсульта


Автор: ressac 8.3.2008, 17:38
Код

SELECT namen
FROM emp
WHERE IdEmp
IN (

SELECT DISTINCT IdEmp -- это вовращает три простых цифры (1,2,3)
FROM ped 

)


получаю ошибку 
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT  DISTINCT IdEmp
FROM ped ) LIMIT 0, 30' at line 5 

и где это ошибка? smile

я до этого сидел за oracle ... тут вроде теже самые правла...

Автор: Fortop 8.3.2008, 19:24
Код

LIMIT 0, 30


Почему в ошибке у тебя есть это, а в коде нет?

Да, а ругается собственно на наличие подзапроса в IN (тут)

Автор: ressac 8.3.2008, 19:45
Fortop, 
Цитата(Fortop @  8.3.2008,  17:24 Найти цитируемый пост)
LIMIT 0, 30

не до писал, но это не важно


Цитата(Fortop @  8.3.2008,  17:24 Найти цитируемый пост)
Да, а ругается собственно на наличие под запроса в IN (тут)


ну это я понял, а вот почему? smile 
хотя с уверенностью сказать могу что написано без ошибок... , тойсть проблема наверно в самом mysql

Автор: Fortop 8.3.2008, 19:51
Проверь запросом из своего кода, не через phpMyAdmin

Автор: ressac 8.3.2008, 21:52
Fortop, проверял --> false

Автор: skyboy 8.3.2008, 23:01
Цитата(ressac @  8.3.2008,  20:52 Найти цитируемый пост)
проверял --> false 

очень четкий и понятный ответ. отлично!
тоже выдает ошибку? или ничего не возвращает?
какая версия сервера MYSQL?(проверить можно при помощи функции http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_version)

Автор: ressac 8.3.2008, 23:17
skyboy, извиняюсь

Код

 VERSION( )
4.0.18-nt


Код

Error

consulta SQL : 

SELECT *
FROM empleados
WHERE idemp = (
SELECT idemp
FROM pedidos )
LIMIT 0 , 30

MySQL :
#1064 - You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT idemp
FROM pedidos )  LIMIT 0, 30' at line 4 



/********************************************************/
PHP:

Код

$f=mysql_query("
select  * 
from empleados
where idemp=(
    select idemp
    from pedidos)
");

echo mysql_errno($c)." - ".mysql_error($c);
mysql_close($c);


Код

1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select idemp from pedidos)' at line 4

Автор: skyboy 8.3.2008, 23:53
Цитата(ressac @  8.3.2008,  22:17 Найти цитируемый пост)
4.0.18-nt

если можешь поставить что-нибудь из 5 ветки(т.е. версии 5.0 и выше) - лучше сделай. четвертая ветка была http://dev.mysql.com/doc/refman/4.1/en/subqueries.html в плане подзапросов. особенно - версии до 4.1

Автор: SelenIT 9.3.2008, 00:35
Любой подзапрос можно переписать через эквивалентный джойн - будет работать даже на 3.23. Для данного случая, по идее, как-то так:
Код

SELECT empleados.*
FROM empleados
INNER JOIN pedidos
USING idemp
GROUP BY pedidos.idemp

Автор: ressac 9.3.2008, 00:57
SelenIT, да я так и сделал, просто интересно было почему не работала суб-консульта.


skyboy, спасиб.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)