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

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

SQL запрос ??? [D6, ADO]


Страницы:   1 2

Sergey ©   (2003-04-25 15:59:00) 

Здравствуйте уважаемые мастера
Допустим есть две таблицы с одинаковыми полями
нужно сделать такой запрос при котором в результате выведутся только те записи которые не совпадают в обеих таблицах ???
идентичные записи игнорируются
Подскажите пожалуйста


Alexandr3   (2003-04-28 08:09:00) [1]

Да есть такое дело
Запрос можно переписать проще
Select * From table1
Uniuon
Select * From table2
Втупил маленько Union по умолчанию возвращает не повторяющиеся значения
Где NULL лучше конечно ставить умолчания


Sergey   (2003-04-28 07:53:00) [2]

>Alexandr3
хотя sorry вполне реально работает в принципе это я прогнал
по причине
если записи в обеих таблицах NULL
то они включаются в запрос


Sergey   (2003-04-28 07:43:00) [3]

>Alexandr3
не знаю почему но не работает выбирает все почти записи (>7000)
хотя реально там на данный момент 5 записей различны (я их сам изменял для тестирования)


Alexandr3   (2003-04-28 07:24:00) [4]

Не получилось как надо t1.abonent = t1.abonent


Alexandr3   (2003-04-28 07:23:00) [5]

select * from gorod t1
where not exists
(select * from gorod_1 t2 where t1.nomer = t2.nomer and t1.proizwod = t2.proizwod
and t1.kod = t2.kod and t1.por=t2.por and t1.abonent = t1.abonent </B >and t1.adress = t2.adress
and t1.wyh = t2.wyh and t1.ats = t2.ats and t1.par = t2.par and t1.spr = t2.spr)

Внимательнее


Alexandr3   (2003-04-28 07:11:00) [6]

У меня есть две таблицы ZakazD и ZakazD12 абсолютно идентичные
Запрос реально возвращает записи разные в обеих таблицах
Полей там больше но разные только указанные
Проверил только что
SELECT *
FROM ZakazD t1
WHERE NOT EXISTS
(SELECT 1
FROM ZakazD12 t2
WHERE t1.Tableid = t2.Tableid AND
t1.ZakazId = t2.Zakazid)
UNION
SELECT *
FROM ZakazD12 t1
WHERE NOT EXISTS
(SELECT 1
FROM ZakazD t2
WHERE t1.Tableid = t2.Tableid AND
t1.ZakazId = t2.Zakazid)


ЮЮ   (2003-04-28 06:28:00) [7]

B что, в одном городе возможны два разных телефона с одним номером? :-) По моему проверки (t1.nomer=t2.nomer) вполне достаточно


ЮЮ   (2003-04-28 06:25:00) [8]

Надо было не Соловьёва слушать, а смотреть самый первый ответ (NickBat © (25.04.03 16:03)), т.е. связать таблицы по всем полям и отобрать не связянные записи:

SELECT *
FROM
Gorod t1
FULL JOIN Gorod_1 t2 ON
(t1.abonent = t2.abonent) AND
(t1.proizwod=t2.proizwod) AND
(t1.nomer=t2.nomer)
WHERE (t1.nomer IS NULL) or (t2.nomer IS NULL)


Sergey   (2003-04-27 11:47:00) [9]

>Соловьев ©

т.е я попоробывал с несколькими полями на or
запрос длился более 5 мин и я его так и не дождался
пришлось изменить на это

select t1.Nomer, t1.abonent, t1.proizwod
from gorod t1
where ( not
t1.abonent=any
(select t1.abonent
from gorod t1
join gorod_1 t2 on t1.abonent = t2.abonent))
union
select t1.Nomer, t1.abonent, t1.proizwod
from gorod t1
where
(not
t1.nomer=any
(select t1.nomer
from gorod t1
join gorod_1 t2 on t1.nomer=t2.nomer))
union
select t1.Nomer, t1.abonent, t1.proizwod
from gorod t1
where
(not
t1.proizwod=any
(select t1.proizwod
from gorod t1
join gorod_1 t2 on t1.proizwod=t2.proizwod))

как вы считаете является ли это оптимальным
или можно как - нибудь изменить
(просто сильно большой запрос мне не нравится )
т.е если сейчас запрос на 3 поля а в таблице 10 то запрос будет огромный :(
можно ли как -нибудь упростить

Подскажите пожалуйста


Sergey   (2003-04-26 23:24:00) [10]

>Alexandr3

select * from gorod t1
where not exists
(select * from gorod_1 t2 where t1.nomer = t2.nomer and t1.proizwod = t2.proizwod
and t1.kod = t2.kod and t1.por=t2.por and t1.abonent = t1.abonent and t1.adress = t2.adress
and t1.wyh = t2.wyh and t1.ats = t2.ats and t1.par = t2.par and t1.spr = t2.spr)

к сожалению не работает
выбирает кучу всего только не то что нужно
(в выборку входят записи которые реально одинаковы в обеих таблицах) ???


Sergey   (2003-04-26 22:34:00) [11]

тестировал такой вариант

select t1.Nomer, t1.Kod, t1.Proizwod, t1.por, t1.abonent, t1.adress, t1.wyh, t1.Ats, t1.Par, t1.Spr
from gorod t1
where (not
t1.nomer=any
(select t1.nomer
from gorod t1
join gorod_1 t2 on t1.nomer=t2.nomer))
вот так сработало, а
тот вариант что предложил господин Соловьев почему то не прошел
да тестировал на SQL server 2000


>Alexandr3

ча попробую :)


Alexandr3   (2003-04-26 05:48:00) [12]

MINUS делается так
select * from table1 t1
where not exists(select 1 from table2 t2 where t1.field1 = t2.field1 and t1.field2 = t2.field2)
Полей на AND конечно можетбыть сколько угодно


Alexandr3   (2003-04-26 05:46:00) [13]

MINUS делается так
select * from table1 t1
where not exists(select 1 from table2 t2 where t1.field1 = t2.field1 and t1.field2 = t2.field2)


Alexandr3   (2003-04-26 05:39:00) [14]

Select из первой которых нет во второй
UNION
Select из второй которых нет в первой
На http://sql.parking.ru/forum/actualtopics.aspx?bid=1
много вопросов с ответами по операции MINUS то бишь
Select из первой которых нет во второй


Соловьев   (2003-04-25 17:08:00) [15]


> т.е просто типа пропистать подобное для всех полей таблицы

да.


Sergey   (2003-04-25 17:00:00) [16]

ну во всяком случае спасибо за помощь :)


Sergey   (2003-04-25 16:36:00) [17]

>Выше выдаст те которые есть во второй, но нет в первой, а ниже
>наоборот

да но насколько я понял здесь идет проверка по одному полю а мне надо чтобы по всем полям таблицы
т.е просто типа пропистать подобное для всех полей таблицы


Соловьев   (2003-04-25 16:23:00) [18]

Выше выдаст те которые есть во второй, но нет в первой, а ниже
наоборот:
+
union

select t2.*
from table2 t2
where
t2.id<>any
(select t2.*
from table2 t2
join table1 t1 on t2.id=t1.id)


Silver_   (2003-04-25 16:22:00) [19]

SELECT * FROM T2
WHERE ID NOT IN (SELECT ID FROM T1
WHERE ID NOT IN (SELECT ID FROM T2))



выдаст все из Т2 которых нет в (выдаст все из Т1 которых нет в Т2)

P.S. в пояснении ошибки нет а код надо бы настроить (наверное) типа T1.ID, T2.ID, ...


Соловьев   (2003-04-25 16:15:00) [20]


select t1.*
from table1 t1
where
t1.id<>any
(select t1.*
from table1 t1
join table2 t2 on t1.id=t2.id)


Страницы:   1 2

Наверх

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