Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
Подскажите как написать запрос?
Есть 2 таблица , связь один ко многим по полю Docid ,во второй таблице есть еще поле Inic , кторое для одного Docid может быть и 28 и 5251

docid inic
1 28
1 5251
1 28

2 28

3 5251
Нужно отобрать только те записи по docid у которых inic =28 , т.е 2 запись
7 сен 09, 15:40    [7627414]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
where inic =28 не помогает разве ?
7 сен 09, 15:41    [7627419]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
нет
7 сен 09, 15:43    [7627425]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
МИхаил__________________
нет


еее..свой вариант запроса покажите ?
7 сен 09, 15:43    [7627430]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
МИхаил__________________
нет

Хороший ответ
И почему не помогает ?
7 сен 09, 15:43    [7627433]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
SELECT d.docid
FROM DOCUMENTS d
where
--docid='78554' and
d.docid not in (select docid from VISAS where VISAAUTH=5251 )
7 сен 09, 15:45    [7627445]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Glory
Member

Откуда:
Сообщений: 104760
МИхаил__________________
SELECT d.docid
FROM DOCUMENTS d
where
--docid='78554' and
d.docid not in (select docid from VISAS where VISAAUTH=5251 )

И где тут where inic =28 ?
И почему not in, если "связь один ко многим по полю Docid " ?

Сообщение было отредактировано: 7 сен 09, 15:47
7 сен 09, 15:47    [7627454]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
МИхаил__________________,

гы,а где 28 вообще ?
7 сен 09, 15:47    [7627455]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
SELECT d.docid
FROM DOCUMENTS d
where
docid='78554' and
d.docid in (select docid from VISAS where VISAAUTH=28 )
7 сен 09, 15:48    [7627467]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
select * from VISAS where docid = 78554

что в поле VISAAUTH написано?
-------------------------------------
Jedem Das Seine
7 сен 09, 15:50    [7627471]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
сорри вот что-то похожее
SELECT d.docid
FROM DOCUMENTS d
where
docid='78554' and
d.docid in (select docid from VISAS where inic=28 )
7 сен 09, 15:51    [7627482]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
да ну смысл? или поле докид не явлеться уникальным в таблице Документ? и зачем подзапрос,если есть 1 значение то?
-------------------------------------
Jedem Das Seine
7 сен 09, 15:53    [7627497]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
изначально запрос такой
SELECT t.TYPESHNAME, d.*, v.*, o.ORGNAME, d.OUTNUM, d.OUTDATE, d.KDATE, d.INNUM, d.INDATE, p.FNAME, pc.FNAME AS CORRFNAME
FROM DOCUMENTS d, PERSONS p, PERSONS pc, VISAS v, DOCTYPES t, ORGANIZATIONS o
WHERE o.ORGID=d.CORRORG AND p.PID=d.ENTPERS AND d.CORRPERS=pc.PID AND d.DOCID=v.DOCID AND d.TYPE=t.TYPEID AND v.KOFLAG<>1 AND d.KFLAG>0 AND d.ARCHIVE<>1 AND d.KOFFFLAG<>1 AND v.VISATYPE>52 AND v.VISAAUTH=4268 AND v.INIC=28
ORDER BY d.KDATE, d.INDATE, d.TYPE, d.INNUM
7 сен 09, 15:55    [7627524]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
проблема в том , что в это запрос попадают строчки
docid inic
1 28
1 5251
1 28
а должны попадать только

docid inic
2 28

3 28
7 сен 09, 15:58    [7627552]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
непонятно то докид1 по всей тблице,а то 2и и 3
давай те проще пример тестовых данных и что хотите в результате ?
-------------------------------------
Jedem Das Seine
7 сен 09, 16:05    [7627601]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
iljy
Member

Откуда:
Сообщений: 8711
МИхаил__________________,

select docid
from Table2
group by docid
having count(case when inic != 28 then 1 end) = 0

это имеется ввиду?
7 сен 09, 16:05    [7627607]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Senya_L
Member

Откуда: Москва
Сообщений: 5381
МИхаил__________________
проблема в том , что в это запрос попадают строчки
docid inic
1 28
1 5251
1 28
а должны попадать только

docid inic
2 28

3 28
Потому что надо пользоваться нормальными JOIN'ами. У вас декартово произведение получается, видимо. Как именно - ищите сами
7 сен 09, 16:05    [7627610]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
SELECT d.docid,v.inic
FROM DOCUMENTS d, VISAS v
WHERE
d.DOCID=v.DOCID
AND v.INIC=28
and d.docid='78554'

вот упрощенно запрос , надо отобрать только те записи в docid у которых в inic только 28
7 сен 09, 16:09    [7627640]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
у вас будет быбираться документ с докид = 78554 и иником =28,если для документа докид = 78554 , есть больше чем 1 запись в таблице Виз, то нужен лефт джойн ,если значения иник могут быть не только 28
-------------------------------------
Jedem Das Seine
7 сен 09, 16:12    [7627669]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
iljy
Member

Откуда:
Сообщений: 8711
МИхаил__________________
SELECT d.docid,v.inic
FROM DOCUMENTS d, VISAS v
WHERE
d.DOCID=v.DOCID
AND v.INIC=28
and d.docid='78554'

вот упрощенно запрос , надо отобрать только те записи в docid у которых в inic только 28


?? а вы вообще свой запрос внимательно читали??
v.INIC=28 and d.docid='78554'


вы в принципе отбираете только одну пару значений, т.е. функции вашего запроса сводятся максимум к тому, что проверяется наличие этих значений в таблицах.
7 сен 09, 16:14    [7627683]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
d.docid='78554' это только для проверки
7 сен 09, 16:16    [7627705]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
убрав ето значение из запроса - ві должні получить все документі с иник =28
-------------------------------------
Jedem Das Seine
7 сен 09, 16:18    [7627725]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
МИхаил__________________
Member

Откуда:
Сообщений: 573
SELECT d.docid,v.inic
FROM DOCUMENTS d
LEFT JOIN VISAS v on d.docid=v.docid
inic =28
так
7 сен 09, 16:19    [7627730]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
iljy
Member

Откуда:
Сообщений: 8711
МИхаил__________________,

для проверки - чего??
ну да ладно.

не знаю как остальные, а я так и не понял чего вы хотите: получить те docid, для которых есть inic=28, или для которых есть ТОЛЬКО inic=28?
7 сен 09, 16:19    [7627731]     Ответить | Цитировать Сообщить модератору
 Re: Подскажите как написать запрос?  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
SELECT d.docid,v.inic
FROM DOCUMENTS d
 inner join VISAS v on d.DOCID=v.DOCID 
WHERE  v.INIC=28 
?
-------------------------------------
Jedem Das Seine
7 сен 09, 16:20    [7627735]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить