Как я могу сравнить две таблицы и удалить на совпадающих полях (не совпадающих записей) - PullRequest
1 голос
/ 19 марта 2009

Сценарий: выборочное обследование должно быть проведено с участием 20 000 человек. Размер выборки составляет 3500 из общего числа 20000 участников. Все участники членства находятся в таблице tblMember. Такое же исследование было проведено в предыдущем году, и опрошенные члены находятся в tblSurvey08. Данные о членстве могут меняться в течение года (например, новый адрес электронной почты и т. Д.), Но данные MemberID остаются прежними.

Как удалить MemberID / записи, содержащиеся в tblSurvey08, из tblMember, чтобы создать новую таблицу потенциальных участников для опроса (назовем ее tblPotentialSurvey09) И снова запись для отдельного члена может не совпадать из разных таблиц, но поле MemberID останется неизменным.

Я довольно новичок в этом вопросе, но, похоже, у меня возникла проблема. Поиск решения - я мог бы использовать функцию EXCEPT, но записи для отдельных членов не обязательно одинаковы для разных таблиц - просто MemberID быть таким же.

Спасибо

Ответы [ 4 ]

5 голосов
/ 19 марта 2009
SELECT
   * (replace with column list)
FROM
   member m
LEFT JOIN
   tblSurvey08 s08
   ON m.member_id = s08.member_id
WHERE 
   s08.member_id IS NULL

даст вам только участников, не участвующих в опросе 08. Это объединение более эффективно, чем конструкция NOT IN. Новая таблица не очень хорошая идея, так как вы дублируете данные. Представление с вышеупомянутым запросом было бы лучшим выбором.

0 голосов
/ 19 марта 2009

Внешнее соединение должно делать:

select m_09.MemberID 
from tblMembers m_09 left outer join 
     tblSurvey08 m_08 on m_09.MemberID = m_08.MemberID 
where 
m_08.MemberID is null
0 голосов
/ 19 марта 2009

Прежде всего, я бы не стал создавать новую таблицу только для выбора потенциальных участников. Вместо этого я бы создал новое поле true / false (1/0), сообщающее, имеют ли они право.

Однако, если вы все еще хотите скопировать данные в новую таблицу, вот как вы можете это сделать:

INSERT INTO tblSurvey00 (MemberID) 
  SELECT MemberID
  FROM tblMember m
  WHERE NOT EXISTS (SELECT 1 FROM tblSurvey09 s WHERE s.MemberID = m.MemberID)

Если вы просто хотите создать новое поле, как я предложил, аналогичный запрос сделает эту работу.

0 голосов
/ 19 марта 2009

Я прошу прощения заранее, если я не понял ваш вопрос, но я думаю, что это то, что вы просите. Вы можете использовать оператор insert into.

insert into tblPotentialSurvey09
select your_criteria from tblMember where tblMember.MemberId not in (
    select MemberId from tblSurvey08
)
...