mysql correlated subquery question

dzruyk
Дата: 28.01.2013 23:14:30
Здравствуйте.

Не могу разобраться с причиной ошибки в запросе.

Есть запрос:
select main.table_name, main.constraint_name 
from (
        select ucc.table_name, ucc.constraint_name, COUNT(ucc.column_name) as nr_columns 
        from User_cons_columns ucc, User_constraints uc  
        where ucc.table_name = uc.table_name and 
        ucc.constraint_name = uc.constraint_name and 
        uc.constraint_type = "R" 
        group by ucc.table_name, ucc.constraint_name
) main 
where 
(
        select max(coincidence_ind.n) 
        from (
                select count(uic.index_name) as n
                from User_ind_columns uic, (
                        select ucc.table_name, ucc.constraint_name, ucc.column_name, ucc.position 
                        from User_cons_columns ucc, User_constraints uc  
                        where ucc.table_name = uc.table_name and 
                        ucc.constraint_name = uc.constraint_name and 
                        uc.constraint_type = "R" 
                ) ex  
                where uic.table_name = main.table_name and 
                ex.constraint_name = main.constraint_name and 
                uic.column_name = ex.column_name and 
                uic.column_position = ex.position 
                group by uic.index_name
        ) as coincidence_ind
) < main.nr_columns;


mysql выдаёт ошибку:
ERROR 1054 (42S22): Unknown column 'main.table_name' in 'where clause'
Прав ли я что проблема в большой вложенности?
Заранее спасибо за ваши ответы.
MasterZiv
Дата: 28.01.2013 23:20:56
dzruyk,

Нет, не прав. (я пока даже запрос не читал)
MasterZiv
Дата: 28.01.2013 23:24:40
Зачем же все так сложно?
dzruyk
Дата: 28.01.2013 23:47:06
Тестовое задание.
у меня нет комплекса Бога в реальной жизни я бы не стал так извращаться)
DBConstructor
Дата: 29.01.2013 05:43:43
dzruyk, в чем именно заключается тестовое задание?
bochkov
Дата: 29.01.2013 12:12:53
MasterZiv
Зачем же все так сложно?

да это не сложно, вот вычислить нахождение точки в многоугольнике - таблица координат точек,
вот это внатуре сложно, первый день еще понимешь, что написал, и что примерно происходит, на 2-й уже нет
dzruyk
Дата: 29.01.2013 14:08:58
DBConstructor,
нашёл текст задания на форуме, самому перепечатывать лень:)
http://www.sql.ru/forum/actualthread.aspx?tid=963103

В принципе немного изменил запрос и теперь всё работает(по крайней мере должно)
select main.table_name, main.constraint_name 
from (
	select ucc.table_name, ucc.constraint_name, COUNT(ucc.column_name) as nr_columns 
	from User_cons_columns ucc, User_constraints uc 
	where ucc.table_name = uc.table_name and 
	ucc.constraint_name = uc.constraint_name and 
	uc.constraint_type = "R"
       	group by ucc.table_name, ucc.constraint_name
) main 
where 
main.nr_columns > ALL (
	select COALESCE((select count(uic.index_name) as n
	from User_ind_columns uic, (
		select ucc.table_name, ucc.constraint_name, ucc.column_name, ucc.position 
		from User_cons_columns ucc, User_constraints uc 
		where ucc.table_name = uc.table_name and 
		ucc.constraint_name = uc.constraint_name and 
		uc.constraint_type = "R"
	) ex 
	where uic.table_name = main.table_name and
	ex.constraint_name = main.constraint_name and 
	uic.column_name = ex.column_name and 
	uic.column_position = ex.position 
	group by uic.index_name), 0)
);


просто не понятно почему изменённый запрос работает а на исходный вылезает ошибка