Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Булевая алгебра в SQL
 
 автор: Lulukyan   (15.05.2012 в 23:46)   личное сообщение
 
 

Я щас свихнусь :-)
Скажите пожалуйста эти два SQL-запроса не должны давать два неперескающихся наборов записей?

SELECT rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR
FROM rREO_ExistRegNum INNER JOIN rVehiclesNumbers ON rREO_ExistRegNum.KOD = rVehiclesNumbers.reg_num
WHERE (((rVehiclesNumbers.cert_num)=[k_Qart]) AND ((rVehiclesNumbers.number)=[TDHAMAR]))
GROUP BY rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR;




SELECT rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR
FROM rREO_ExistRegNum INNER JOIN rVehiclesNumbers ON rREO_ExistRegNum.KOD = rVehiclesNumbers.reg_num
WHERE (((rVehiclesNumbers.cert_num)<>[K_QART])) OR (((rVehiclesNumbers.number)<>[TDHAMAR]))
GROUP BY rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR;

  Ответить  
 
 автор: kot_k_k   (16.05.2012 в 09:11)   личное сообщение
 
 

могут если существуют записи где
rVehiclesNumbers.cert_num = 3 ; rVehiclesNumbers.number = 4
rVehiclesNumbers.cert_num = 3 ; rVehiclesNumbers.number = 2
rVehiclesNumbers.cert_num = 2 ; rVehiclesNumbers.number = 4
получим одинаковый набор
первый запрос выводит - первую строку, второй - вторую и третью.
я конешно не знаю что это
rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR
только если один из них счетчик без совпадений то тогда не будет такого, а если это просто какие либо значения то пресечение получим.

  Ответить  
 
 автор: lulukyan   (16.05.2012 в 14:23)   личное сообщение
 
 

Запрос rREO_ExistRegNum содержит всего 3 поля KOD, K_QART, TDHAMAR И сгруппирован по ним. Содержит всего 662 записи
Запрос rVehiclesNumbers содержит всего 3 поля reg_num,cert_num,number и сгруппирован по ним

первый запрос(где AND) содержит 650 записей
второй запрос(где OR) содержит 33 записb

Оба запроса также сгруппированы по тем же самым полям

Вообще я тут пытался использовать булево тождество NOT (A AND B) = ( NOT A) OR (NOT B)

  Ответить  
 
 автор: kot_k_k   (16.05.2012 в 15:19)   личное сообщение
 
 

чет не понял
вот у тебя поля


SELECT rREO_ExistRegNum.KOD, rREO_ExistRegNum.K_QART, rREO_ExistRegNum.TDHAMAR



они в оббох запросах, поэтому если они не являются счетчиками - а просто значения то получим пересекющиеся вещи
Вот твои записи

KOD, K_QART, TDHAMAR    + твои условия       [K_QART]=1 и [TDHAMAR]=7
    1       А        В                   1        7
    1       А        В                   2        7
    1       А        В                   2        3
    1       А        В                   1        6

оба запроса дадут одни и теже значения.

KOD, K_QART, TDHAMAR
1 _____ А _____ В

может так: во второй запрос включить первый left jion с проверкой is Null - без структуры не поянть.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList