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


Автор: Алексей 4.2.2009, 17:18
Код

select * from(

 
 (
   (select summa_pay,doc_date,ID_SUBJECT_RETAIL  from indoc where id_subject=20) as A 
 
    join 
 
     (select summa_pay,doc_date,ID_SUBJECT_RETAIL from indoc where id_subject=21) as B 
 
     on A.doc_date=B.doc_date
 
)  as C 
 
join 
 
(select NO366,ID_SUBJECT from STORE where id_subject = 20 or id_subject = 21) as D 
 
on C.ID_SUBJECT_RETAIL = D.ID_SUBJECT
 )


Пишет некорректный синтаксис около as

Автор: Akella 4.2.2009, 17:24
у тебя получается так (если не использовать вложенный запрос)  smile 
Код
select id, name from table as c


Добавлено через 1 минуту и 48 секунд
Малого, того, у тебя 2 as smile, нужно обычно писать конкретно, где ошибка. Хотя в твоём запросе и так видно, что в первом случае.
Если не знаешь, что такое as, и как его использовать, то поищи по форуму примеры и почитай про as.

Автор: Алексей 4.2.2009, 17:28
Эээ? Не понял smile 

Вроде бы у меня так

Код

select * from ((table1 as A join table2 as B) as C join table3 as D)


P.S. да в том то и дело что раньше проблем не было, а тут просто наважденье какое-то. Ни хрена не вижу smile 

Автор: vladimir74 4.2.2009, 17:37
Цитата(Алексей @  4.2.2009,  15:18 Найти цитируемый пост)
Пишет некорректный синтаксис около as 

а помойму правильно пишет...
Цитата(Алексей @  4.2.2009,  15:28 Найти цитируемый пост)
Вроде бы у меня так
Код

select * from ((table1 as A join table2 as B) as C join table3 as D)


и что это должно означать? откуда должны браться данные? из какой нерваны?
да и если куски смотреть в отдельности, там тоже страшно становится...
Код

 ((table1 as A join table2 as B) as C join table3 as D)

join чего с чем? по каким связям?

Автор: Akella 4.2.2009, 17:38
а после as C поставь скобку

Автор: vladimir74 4.2.2009, 17:38
а кстати что вообще должно получиться?

Автор: Akella 4.2.2009, 17:39

M
Akella
название темы должно отражать её суть
, а у тебя проблемы с синтаксисом, с as, а ты пишешь, что проблемы с join

Автор: Алексей 4.2.2009, 17:40

Код

join чего с чем? по каким связям?



А вы сам пост читали?

Я просто опустил связи, что короче было.


Автор: Akella 4.2.2009, 17:41
да, запрос вобщетта страшненький  smile , бедный сервер

Автор: Алексей 4.2.2009, 17:42
Ну да знаю) Скобка не помогла

Автор: skyboy 4.2.2009, 17:45
Цитата(Алексей @  4.2.2009,  16:40 Найти цитируемый пост)
Я просто опустил связи, что короче было.

проблема не в упущенных связях.
а в упущенном списке полей.
т.е. должно быть примерно так:
Код

select * from(
 
 (
    SELECT *
    FROM

   (select summa_pay,doc_date,ID_SUBJECT_RETAIL  from indoc where id_subject=20) as A 
 
    join 
 
     (select summa_pay,doc_date,ID_SUBJECT_RETAIL from indoc where id_subject=21) as B 
 
     on A.doc_date=B.doc_date
 
)  as C 
 
join 
 
(select NO366,ID_SUBJECT from STORE where id_subject = 20 or id_subject = 21) as D 
 
on C.ID_SUBJECT_RETAIL = D.ID_SUBJECT
 )

Автор: Akella 4.2.2009, 17:46
А вообще к какому полю или выборке у тебя привязано as C ?

Автор: skyboy 4.2.2009, 17:46
Цитата(Akella @  4.2.2009,  16:24 Найти цитируемый пост)
у тебя получается так (если не использовать вложенный запрос) 

нет, у него, скорее, так:
Код

from <table> as c

во вложенном запросе

Добавлено через 1 минуту и 1 секунду
а, да. ещё раз перечисление полей пропустил я.
Код

select * from(
    SELECT *
    FROM
 (
    SELECT *
    FROM
   (select summa_pay,doc_date,ID_SUBJECT_RETAIL  from indoc where id_subject=20) as A 
 
    join 
 
     (select summa_pay,doc_date,ID_SUBJECT_RETAIL from indoc where id_subject=21) as B 
 
     on A.doc_date=B.doc_date
 
)  as C 
 
join 
 
(select NO366,ID_SUBJECT from STORE where id_subject = 20 or id_subject = 21) as D 
 
on C.ID_SUBJECT_RETAIL = D.ID_SUBJECT
 )

а запрос страшный, да.

Автор: Akella 4.2.2009, 17:48
Вроде нашёл недостающую скобку

Цитата

select * from(
 
 (
    SELECT *
    FROM(


   (select summa_pay,doc_date,ID_SUBJECT_RETAIL  from indoc where id_subject=20) as A 
 
    join 
 
     (select summa_pay,doc_date,ID_SUBJECT_RETAIL from indoc where id_subject=21) as B 
 
     on A.doc_date=B.doc_date
 
)  as C
 
join 
 
(select NO366,ID_SUBJECT from STORE where id_subject = 20 or id_subject = 21) as D 
 
on C.ID_SUBJECT_RETAIL = D.ID_SUBJECT
 )



Добавлено через 46 секунд
Цитата(skyboy @  4.2.2009,  17:46 Найти цитируемый пост)
Цитата(Akella @  4.2.2009,  16:24 Найти цитируемый пост)
у тебя получается так (если не использовать вложенный запрос) 

нет, у него, скорее, так:
Выделить всёкод SQL
1:
    
from <table> as c

во вложенном запросе

ага, это в первом моём ответе

Автор: Алексей 4.2.2009, 17:49
skyboy, Спасибо большое. Помогло. Жаль плюсик не могу поставить! Akella, и вам спасибо)

Автор: skyboy 4.2.2009, 18:27
Цитата(Akella @  4.2.2009,  16:48 Найти цитируемый пост)
ага, это в первом моём ответе 

в твоем-то примере поля есть  smile 
Цитата(Akella @  4.2.2009,  16:24 Найти цитируемый пост)
select id, name from table as c

Цитата(Алексей @  4.2.2009,  16:49 Найти цитируемый пост)
Помогло

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

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