[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Запрос на выбор с базы
Страницы: 1, 2, 3
Michael
Я этот запрос по быстрому написал. Лучше будет:
SQL
SELECT* from stat st1 where CONCAT(st1.name,st1.last) not in (
select distinct CONCAT(st2.name,st2.last)
from stat st2 where st2.articul=622
)

Цитата
я и хотел заставить mysql выполнять вложенный запрос один раз, вместо раза для каждой записи.

Почему? MySQL сначала построит проверочное множество, а потом раз пройдет по основной таблице. Это же не кореллированный подзапрос.

glock18 спасибо за оценку.

_____________
There never was a struggle in the soul of a good man that was not hard
glock18
SQL
SELECT s.* FROM (SELECT CONCAT(name,' ', last) as fullname, GROUP_CONCAT(CONCAT(articul, ' ') SEPARATOR ',') as art
FROM stat s GROUP BY name) filter
JOIN stat s ON CONCAT(s.name, ' ', s.last) = filter.fullname AND LOCATE('622 ', filter.art) = 0;


Вот оно еще одно решение. С гораздо более страшным explain'ом biggrin.gif mysql меня огорчил и стал выполнять запрос другом порядке smile.gif Копаться с этим запросом мне уже надоело. Так что действительно, решение предложенное Michael, пожалуй, единственное нормальное.

Это мое решение разве что за музейный экспонат пойдет laugh.gif
glock18
Michael
Судя по explain, твой первый запрос был быстрее. И это логично - наличие distinct вынуждает mysql использовать временную таблицу.

Цитата
Почему? MySQL сначала построит проверочное множество, а потом раз пройдет по основной таблице. Это же не кореллированный подзапрос.


Увы, нет. так же как со всеми или может быть почти со всеми вложенными запросами.

Цитата
"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
1,"PRIMARY","st1","ALL","","","","",6,"Using where"
2,"DEPENDENT SUBQUERY","st2","ALL","","","","",6,"Using where; Using temporary"


тут правда сложно разобрать что-то. видно только порядок выполнения запросов и тип второго запроса. это обо всем говорит smile.gif

Это explain для второго твоего. у первого, как я уже сказал, не было using temporary.

Справедливости ради скажу, что у запроса, который я "родил", explain гораздо более страшный smile.gif
Michael
Жалко нет

user posted image
он бы чем-нибудь обязательно удивил в SQL.

А автор непонятно разобрался или нет...

_____________
There never was a struggle in the soul of a good man that was not hard
Guest
Цитата (Michael @ 27.08.2009 - 12:17)
Жалко нет

user posted image
он бы чем-нибудь обязательно удивил в SQL.

А автор непонятно разобрался или нет...

спасибо большое - разобрался, проверил smile.gif

тока еще есть вопрос -

SELECT* from stat st1 where CONCAT(st1.name,st1.last) not in (
select distinct CONCAT(st2.name,st2.last)
from stat st2 where st2.articul=622
)

как можно использовать данный запрос на Interbase ?
Michael
Цитата
как можно использовать данный запрос на Interbase ?


То же самое - запрос типовой для SQL, только узнать какая функция соединяет строки в Interbase и заменить ей concat.

_____________
There never was a struggle in the soul of a good man that was not hard
SeryiVolk
Цитата (Michael @ 27.08.2009 - 13:56)

То же самое - запрос типовой для SQL, только узнать какая функция соединяет строки в Interbase и заменить ей concat.


Спасибо всем за ответы!


думаю разберусь smile.gif
SeryiVolk
вобщем у меня появился вариант добавить каждому человек уникальный ID, вот:

Цитата
idnumber   Name   last    articul

A00012    ivan     petrov  622

A00012    ivan    petrov    623
 
A00011   petya   ivanoff  2000

A00025   kolya   pupkin  621

A00016   kostya   popov  621



и тогда сделать такой запрос:

SQL
SELECT IDNUMBER, NAME, LAST, ARTICUL
FROM STAT WHERE IDNUMBER NOT IN ( SELECT IDNUMBER
FROM STAT WHERE ARTICUL = 622 )



правильно? smile.gif

 ! 

М
Пользуйся тегами форматирования - не первый пост уже, а форматирования так и нет. Кнопки находятся над формой написания поста.
glock18
glock18
да, так тоже можно
DenPHP
оо гуд это можно строить такие конструкции
SQL
SELECT *
FROM STAT WHERE * NOT IN ( SELECT IDNUMBER
FROM STAT WHERE * NOT IN (SELECT IDNUMBER
FROM STAT WHERE * NOT IN *) )

такого вида? вложеные?
Michael
DenPHP все можно только очень осторожно.
А твой запрос не гуд.


_____________
There never was a struggle in the soul of a good man that was not hard
SeryiVolk
сори, не знал про теги... huh.gif

все получилось

glock18
Цитата
оо гуд это можно строить такие конструкции

интересно, зачем?
SeryiVolk
на деле оказалось этот запрос в реальной базе капппец просто как долго выполняется sad.gif

может как то оптимизировать ?
Michael
А что ты последнее вводишь?
Было ж две версии. (с distinct и без)

_____________
There never was a struggle in the soul of a good man that was not hard
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.