Текущий архив: 2003.05.19;
Скачать: CL | DM;
ВнизSQL запрос ??? Найти похожие ветки
← →
Sergey (2003-04-25 15:59) [0]Здравствуйте уважаемые мастера
Допустим есть две таблицы с одинаковыми полями
нужно сделать такой запрос при котором в результате выведутся только те записи которые не совпадают в обеих таблицах ???
идентичные записи игнорируются
Подскажите пожалуйста
← →
NickBat (2003-04-25 16:03) [1]выбрать те которых нет в первой таблице:
select
t1.TF,
t1.F1,
t1.F2
from TEST t1
left join test2 t2 on t1.f1=t2.f1
where t2.f1 is null
← →
Соловьев (2003-04-25 16:05) [2]
select t1.*
from table1 t1
where
t1.id<>any
(select t1.*
from table1 t1
right join table2 t2 on t1.id=t2.id)
← →
Соловьев (2003-04-25 16:06) [3]сорри, ничего не выдаст.
← →
Sergey (2003-04-25 16:12) [4]>сорри, ничего не выдаст.
А КАК ЧТО БЫ выдал
← →
Соловьев (2003-04-25 16:15) [5]
select t1.*
from table1 t1
where
t1.id<>any
(select t1.*
from table1 t1
join table2 t2 on t1.id=t2.id)
← →
Silver_ (2003-04-25 16:22) [6]
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:23) [7]Выше выдаст те которые есть во второй, но нет в первой, а ниже
наоборот:
+
union
select t2.*
from table2 t2
where
t2.id<>any
(select t2.*
from table2 t2
join table1 t1 on t2.id=t1.id)
← →
Sergey (2003-04-25 16:36) [8]>Выше выдаст те которые есть во второй, но нет в первой, а ниже
>наоборот
да но насколько я понял здесь идет проверка по одному полю а мне надо чтобы по всем полям таблицы
т.е просто типа пропистать подобное для всех полей таблицы
← →
Sergey (2003-04-25 17:00) [9]ну во всяком случае спасибо за помощь :)
← →
Соловьев (2003-04-25 17:08) [10]
> т.е просто типа пропистать подобное для всех полей таблицы
да.
← →
Alexandr3 (2003-04-26 05:39) [11]Select из первой которых нет во второй
UNION
Select из второй которых нет в первой
На http://sql.parking.ru/forum/actualtopics.aspx?bid=1
много вопросов с ответами по операции MINUS то бишь
Select из первой которых нет во второй
← →
Alexandr3 (2003-04-26 05:46) [12]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:48) [13]MINUS делается так
select * from table1 t1
where not exists(select 1 from table2 t2 where t1.field1 = t2.field1 and t1.field2 = t2.field2)
Полей на AND конечно можетбыть сколько угодно
← →
Sergey (2003-04-26 22:34) [14]тестировал такой вариант
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
ча попробую :)
← →
Sergey (2003-04-26 23:24) [15]>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-27 11:47) [16]>Соловьев ©
т.е я попоробывал с несколькими полями на 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 то запрос будет огромный :(
можно ли как -нибудь упростить
Подскажите пожалуйста
← →
ЮЮ (2003-04-28 06:25) [17]Надо было не Соловьёва слушать, а смотреть самый первый ответ (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)
← →
ЮЮ (2003-04-28 06:28) [18]B что, в одном городе возможны два разных телефона с одним номером? :-) По моему проверки (t1.nomer=t2.nomer) вполне достаточно
← →
Alexandr3 (2003-04-28 07:11) [19]У меня есть две таблицы 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)
← →
Alexandr3 (2003-04-28 07:23) [20]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:24) [21]Не получилось как надо t1.abonent = t1.abonent
← →
Sergey (2003-04-28 07:43) [22]>Alexandr3
не знаю почему но не работает выбирает все почти записи (>7000)
хотя реально там на данный момент 5 записей различны (я их сам изменял для тестирования)
← →
Sergey (2003-04-28 07:53) [23]>Alexandr3
хотя sorry вполне реально работает в принципе это я прогнал
по причине
если записи в обеих таблицах NULL
то они включаются в запрос
← →
Alexandr3 (2003-04-28 08:09) [24]Да есть такое дело
Запрос можно переписать проще
Select * From table1
Uniuon
Select * From table2
Втупил маленько Union по умолчанию возвращает не повторяющиеся значения
Где NULL лучше конечно ставить умолчания
Страницы: 1 вся ветка
Текущий архив: 2003.05.19;
Скачать: CL | DM;
Память: 0.5 MB
Время: 0.007 c