Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.07.2015, 15:17   #1
anatoliy1992
Пользователь
 
Регистрация: 31.03.2015
Сообщений: 19
Вопрос Сравнение таблиц по нескольким значениям

добрый день. Извиняюсь если замыливаю повторяющуюся тему но что то не нашел ничего похожего. Имеется две таблице одинаковые по структуре. допустим N1,N2,N3 - Структура таблицы 1 и N4,N5.N6 - второй. мне нужно сравнить записи из одной таблицы и те которых нет в другой вывести. использую такой код но мне нужно чтоб сравнивалось по нескольким столбцам а здесь возможно только по одному.
Код:
use BD
SELECT N1,N2,N3
FROM tabl1
WHERE N1 NOT IN (
SELECT N4
FROM tabl2)

Последний раз редактировалось Stilet; 20.07.2015 в 16:52.
anatoliy1992 вне форума Ответить с цитированием
Старый 20.07.2015, 16:58   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В качестве идеи:
Код:
SELECT N1,N2,N3
FROM tabl1
WHERE N1 NOT IN (
 SELECT N4
 FROM tabl2
  where tabl1.n2=tabl2.n4 and tabl1.n3=tabl2.n5
)
Не уверен в решении, возможно мои более опытные в SQL коллеги не согласятся.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.07.2015, 17:06   #3
anatoliy1992
Пользователь
 
Регистрация: 31.03.2015
Сообщений: 19
По умолчанию

вот нащел какой то такой пример но что то не могу разобраться в нем и вообще не пойму подходит он или нет?

SELECT * FROM Table1
WHERE
NOT EXISTS (SELECT * FROM Table2 WHERE (Table2.r = Table1.r) and (Table2.w = Table1.w))
anatoliy1992 вне форума Ответить с цитированием
Старый 20.07.2015, 17:17   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Гляньте сюда, возможно поможет, смотрим на left outer join

http://blog.codinghorror.com/a-visua...-of-sql-joins/

Последний раз редактировалось waleri; 20.07.2015 в 17:21.
waleri вне форума Ответить с цитированием
Старый 20.07.2015, 18:31   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,770
По умолчанию

Цитата:
Сообщение от anatoliy1992 Посмотреть сообщение
SELECT * FROM Table1
WHERE
NOT EXISTS (SELECT * FROM Table2 WHERE (Table2.r = Table1.r) and (Table2.w = Table1.w))
Да, этот способ подходит, даже более того -- считается общим, в отличии от in, поскольку тратит меньше ресурсов сервера.

Кроме того, в нормальных СУБД можно написать in для ключа:
Код:
select * from table1
where (key1, key2) not in (select key1, key2 from table2);
Но способ с exists является более правильным, повторюсь.
Vapaamies вне форума Ответить с цитированием
Старый 20.07.2015, 22:45   #6
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
Сообщение от anatoliy1992 Посмотреть сообщение
вот нащел какой то такой пример но что то не могу разобраться в нем и вообще не пойму подходит он или нет?

SELECT * FROM Table1
WHERE
NOT EXISTS (SELECT * FROM Table2 WHERE (Table2.r = Table1.r) and (Table2.w = Table1.w))
Так понятно ?
Код:
--  мне нужно сравнить записи из одной таблицы и те которых нет в другой вывести. 
create Table T1(id int identity(1,1),
                name nvarchar(30),
                price money)
-----------------------------------
insert into T1 values(N'Кофе', 50),
                     (N'Сахар', 60),
                     (N'Чай', 35)
select * from T1

------------------------------------------
create Table T2(id int identity(1,1),
                name nvarchar(30),
                price money)
------------------------------------------
insert into T2 values(N'Кофе', 50),
                     (N'Сахар', 60),
                     (N'Чай', 35),
                     (N'Пива', 7),
                     (N'Шашлык', 25)
select * from T2
Смотрю только те записи который есть только T2 и нету T1
Код:
select id, name, price
from T2
where NOT EXISTS(select id, name, price from T1
                 where T2.name=T1.name
                 and T2.price=T1.price)
xxbesoxx вне форума Ответить с цитированием
Старый 21.07.2015, 15:34   #7
anatoliy1992
Пользователь
 
Регистрация: 31.03.2015
Сообщений: 19
По умолчанию

Можно задам Еще один глупый вопрос. Просто у меня с SQL все совсем плохо. Вот допустим имеется таблица в ней много записей окло 20 тыс.
например
| id | familiya | tip | period |
|2 |Смирнов | B1 | 05 |
|3 |Иванов | A2 | 04 |
|2 |Смирнов | B3 | 05 |
вот нужно найти все повторяющиеся записи у которых повторяются id и period
anatoliy1992 вне форума Ответить с цитированием
Старый 21.07.2015, 15:39   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

В качестве идеи:
Код:
select id
from Табличка
group by id
where count(id)>1
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2015, 15:48   #9
anatoliy1992
Пользователь
 
Регистрация: 31.03.2015
Сообщений: 19
По умолчанию

ошибка Неправильный синтаксис около ключевого слова "where".
вот код

Цитата:
use Proezd
select PKU, FAMIL,IMJA,OTCH,VAL,TIP,PERP,MEC
from proezd_ZAP
group by PKU
where count(PKU)>1 AND( PERP='М' OR PERP='КВ')
anatoliy1992 вне форума Ответить с цитированием
Старый 21.07.2015, 16:04   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда уж так:
Код:
select PKU, FAMIL,IMJA,OTCH,VAL,TIP,PERP,MEC
from proezd_ZAP
where pku in (
 select pku
 from Табличка
 group by 1
 where count(pku)>1
)  AND( PERP='М' OR PERP='КВ')
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Excel - сравнение таблиц по нескольким признакам Тяни-Толкай Помощь студентам 2 17.11.2013 20:30
Сортиривка массива структур по нескольким значениям vladqa Общие вопросы C/C++ 0 24.04.2012 22:12
выбор строк из таблицы по нескольким значениям v.v.1992 C/C++ Базы данных 2 07.04.2012 12:54
Сравнение строк по значениям, с дальнейшем переносом Hoochara Microsoft Office Excel 4 22.08.2011 12:08
Поиск по двум значениям из двух таблиц Freerider1972 Microsoft Office Excel 11 20.10.2010 18:45