Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Объединение запросов (UNION) [D6, IB6.x]


Страницы:   1 2

Jaxtor ©   (2003-05-13 12:49:00) 

У меня есть запрос:

select Stock from Stock where StockID=6

Есть еще другой запрос:

select st.*, gr.VenStGr, gr.Data
from VENSTOCK st, VENSTGR gr
where st.VenStGrId=gr.VenStGrId
and (PN like "%HW0533B%")
order by st.STOCK desc,
st.TRANZIT1 desc,
st.TRANZIT2 desc,
st.TRANZIT3 desc,
st.TRANZIT4 desc

Нужно сделать объединение этих запросов.

Пишу,значит :

select Stock from Stock where StockID=6
union
select st.*, gr.VenStGr, gr.Data
from VENSTOCK st, VENSTGR gr
where st.VenStGrId=gr.VenStGrId
and (PN like "%HW0533B%")
order by st.STOCK desc,
st.TRANZIT1 desc,
st.TRANZIT2 desc,
st.TRANZIT3 desc,
st.TRANZIT4 desc

Ошибка появляется:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
count of column list and variable list do not match.

Как сделать так, чтобы если у первой таблицы число полей меньше,
чем во второй, то недостающие в первой таблице поля имели значение NULL?


Jaxtor   (2003-05-13 17:00:00) [21]

>Johnmen
Ладно. Практика покажет:)


Johnmen   (2003-05-13 16:59:00) [22]

ORDER BY лишнее. И так будет упорядочено...


Jaxtor   (2003-05-13 16:52:00) [23]

Почему???


Jaxtor   (2003-05-13 16:50:00) [24]


select gr.VenStGr, st.productid, st.venstgrid, st.PN,st.Product,st.comment, st.stock, st.forsale,st.tranzit1,st.tranzit2,st.tranzit3,st.tranzit4,st.price,st.oldprice,st.priceupdatedate,gr.data from VENSTOCK st,VENSTGR gr
where st.VenStGrId=gr.VenStGrId
and (PN like "%HW0533B%")
order by st.STOCK desc,
st.TRANZIT1 desc,
st.TRANZIT2 desc,
st.TRANZIT3 desc,
st.TRANZIT4 desc
union
select cast (Stock as Varchar(63)),
cast(NULL AS Integer),
cast(NULL AS Integer),
cast(NULL AS Varchar(63)),
cast(NULL AS Varchar(255)),
cast(NULL AS Varchar(63)),
si.quantity,
cast(NULL AS Integer),
cast(NULL AS Integer),
cast(NULL AS Integer),
cast(NULL AS Integer),
cast(NULL AS Integer),
cast(NULL AS Double Precision),
cast(NULL AS Double Precision),
cast(NULL AS TimeStamp),
cast(NULL AS TimeStamp)
from Stock s,stockitem si where (s.stockid=6)
and (si.stockitemid=3164)


Выдает ошибку:

Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 9, char -1.
union.


Desdechado   (2003-05-13 16:45:00) [25]

положение в таблице не важно, важно положение в запросе


Johnmen   (2003-05-13 15:50:00) [26]

>Zacho © (13.05.03 13:20)
>Да, еще одно: имена соответствующих полей должны совпадать

Не обязательно...:)


Jaxtor   (2003-05-13 13:21:00) [27]

ясненько.


Zacho   (2003-05-13 13:20:00) [28]


> Jaxtor © (13.05.03 13:09)

Нет. Первое должно соответствовать первому, второе - второму и т.д. Да, еще одно: имена соответствующих полей должны совпадать


Соловьев   (2003-05-13 13:19:00) [29]

SELECT snum, sname
FROM Salespeople
WHERE city = "London"

UNION

SELECT cnum, cname
FROM Customers
WHERE city = "London"


Jaxtor   (2003-05-13 13:09:00) [30]

>Zacho А как сделать соответствие полей:
поле VENSTRGR - 15-е по счету во втором запросе должно соответствовать первому полю в первом запросе?


Zacho   (2003-05-13 12:58:00) [31]

Сделать так:
select Stock, CAST(NULL AS нужный_тип), CAST(NULL AS ..), ... from Stock where StockID=6


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо