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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.04.2010, 14:34   #1
Hant111
Пользователь
 
Регистрация: 21.03.2010
Сообщений: 12
По умолчанию Запрос на SQL в Access

Добрый день!

Имеются 2 таблицы в Access:

Table1:
-----------------------------------------
id | id_1 | name | famil | otch |
-----------------------------------------

Table2:
-----------------------------------------
id | id_1 | name | famil | otch |
-----------------------------------------

В принципе таблицы по логике вообще никак не связаны - это просто 2 выборки - одна старая а другая новая.(их надо сравнить).
Чтобы выполнять запросы я поставил связь по id(это ключ, счетчик)

1) Запрос, который показывает какие строки из первой таблицы есть во второй(условие - чтобы строки совпадали по всем столбцам):

SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table, Table2
WHERE Table1.id_1=Table1.id_2 and Table1.name = Table2.name and Table1.otch = Table2.otch.

2) Помогите написать запрос, который выдает те строки из первой таблицы, которых нету во второй таблице.
Либо по всем полям, либо только по id.

Я пытался писать, но все запросы некорректные, и работают неправильно:

SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table, Table2
WHERE Table1.id_1<>Table1.id_2 and Table1.name <> Table2.name and Table1.otch <> Table2.otch.

SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table, Table2
WHERE Table1.id_1<>Table1.id_2.


SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table, Table2
WHERE Table1.id_1<>Table1.id_2
GROUP BY Table1.id_1, Table1.name, Table1.famil, Table1.otch

SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table, Table2
WHERE ((SELECT COUNT(*)
FROM Table, Table2
WHERE Table1.id_1=Table1.id_2 and Table1.name = Table2.name and Table1.otch = Table2.otch.) = 0)

Все эти запросы работают некорректно..

Заранее благодарю за ответ1
Hant111 вне форума Ответить с цитированием
Старый 01.04.2010, 14:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Знаю что это делается через JOIN
Не помню точно как но вроде такого:
Код:
SELECT Table1.id_1, Table1.name, Table1.famil, Table1.otch
FROM Table RIGHT JOIN Table2
ON Table1.id_1=Table1.id_2 and Table1.name = Table2.name and Table1.otch = Table2.otch.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.04.2010, 17:38   #3
maLoy*508
Форумчанин
 
Аватар для maLoy*508
 
Регистрация: 28.03.2008
Сообщений: 672
По умолчанию

Ув. Stilet прав...
только есть небольшое уточнение
Код:
SELECT komplekt.*, komplekt.id_kompl
FROM komplekt LEFT JOIN procent ON komplekt.id_kompl = procent.id_kompl
WHERE (((komplekt.id_kompl) Not In (procent.id_kompl)));
maLoy*508 вне форума Ответить с цитированием
Старый 01.04.2010, 19:32   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

не знаю есть ли такой оператор в акссесе
Код:
select * from t1
minus 
select * from t2
добавочка
или вот таким более сложным способом (пример оракловый со списком данных для теста)
Код:
 with t1 as (
  select 1 id, 1 id_2, 1 id_3 from dual union all
  select 2, 1, 2 from dual union all
  select 3, 3, 1 from dual union all
  select 4, 1, 4 from dual union all
  select 5, 5, 1 from dual union all
  select 6, 1, 6 from dual
  ),
  t2 as (
  select 1 id, 1 id_2, 1 id_3 from dual union all
  select 2, 1, 2 from dual union all  
  select 5, 5, 1 from dual union all
  select 10, 5, 10 from dual union all
  select 6, 1, 6 from dual
  )
  
select 
  t1.*, 
  t2.id id2_1,
  t2.id_2 id2_2,
  t2.id_3 id2_3
from t1 left outer join t2 on (t1.id = t2.id and t1.id_2 = t2.id_2 and t1.id_3 = t2.id_3)
where 0=0
  and (t2.id is null
    or t2.id_2 is null
    or t2.id_3 is null)

Последний раз редактировалось soleil@mmc; 01.04.2010 в 19:39.
soleil@mmc вне форума Ответить с цитированием
Старый 01.04.2010, 22:48   #5
Hant111
Пользователь
 
Регистрация: 21.03.2010
Сообщений: 12
По умолчанию

Благодарю вас за ответы)

Нашел альтернативное решение:

Код:
SELECT First.id_1, First.id_2, First.firstname, First.lastname, First.middlename
FROM [First]
WHERE (((First.id_1) Not In (SELECT First.id_1 FROM [First], [Second]
WHERE First.id_1=Second.id_1 And First.firstname=Second.firstname And First.lastname=Second.lastname And First.middlename=Second.middlename)));
Hant111 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос SQL MS Access! Artanis SQL, базы данных 6 12.11.2009 20:05
НАдо сделать запрос на SQL для MS Access! Artanis SQL, базы данных 9 05.11.2009 15:03
Создание новых таблиц в MS SQL SERVERE через SQL запрос в Delphi S_Yevgeniy Помощь студентам 1 27.10.2009 06:26
Запрос SQL из Access в Delphi Talemir БД в Delphi 5 26.08.2009 20:46