2012-11-08 2 views
5

Предположим, у меня есть таблица с именем tbl_med, которая имеет шесть полей: [nom_lab], [nom_desc], [nom_apres], [date_vig], [cod_med], [vr_pmc ].Я хотел бы понять запрос, созданный с помощью Microsoft Access

Я хочу, чтобы запрос MS Access SQL, которая будет:

  1. Найти дублирующиеся записи в отношении четырех полей: [nom_lab], [nom_desc], [nom_apres], [date_vig].
  2. Показать все шесть полей (а не только те, которые используются для проверки дубликатов).

Я использовал MS Access "Найти Мастера запросов Дубликаты", который дал мне следующий SQL:

SELECT tbl_med.[nom_lab], tbl_med.[nom_desc], tbl_med.[nom_apres], tbl_med.[date_vig], tbl_med.[cod_med], tbl_med.[vr_pmc] 
FROM tbl_med 
WHERE tbl_med.[nom_lab] 
IN 
(
    SELECT [nom_lab] 
    FROM [tbl_med] As Tmp 
    GROUP BY [nom_lab], [nom_desc], [nom_apres],[date_vig] 
    HAVING Count(*)>1 

And [nom_desc] = [tbl_med].[nom_desc] 
    And [nom_apres] = [tbl_med].[nom_apres] 
    And [date_vig] = [tbl_med].[date_vig] 

) 
ORDER BY tbl_med.[nom_lab], tbl_med.[nom_desc], tbl_med.[nom_apres], tbl_med.[date_vig]; 

Может кто-нибудь объяснить, почему три And Необходимы условия между горизонтальными линиями правил выше?

У кого-нибудь есть более интуитивный запрос, который было бы легче понять?

+4

Они необходимы, потому что запрос должен ссылаться на собственную версию суммы, чтобы определить, превышает ли счет каждой записи 1, следовательно, является дубликатом. Я бы порекомендовал придерживаться мастера для стран такого типа. –

ответ

1

По существу, три And положения там, потому что вы сказали мастера запросов, что вы хотели, чтобы проверить наличие дубликатов не только на [nom_lab] поле, но и на [nom_desc], [nom_apres] и [date_vig] полей (как указано в начале вашего вопроса).

В подзапросе SELECT [nom_lab] FROM [tbl_med] As Tmp ... HAVING Count(*)>1 говорится, что он ищет записи, которые имеют дубликаты значений [nom_lab]. Затем пункты And удовлетворяют остальным запрошенным критериям дублирования, говоря, что «в дополнение к дублированию значений [nom_lab], я хочу видеть только записи, которые также имеют дублирование во всех трех из этих других полей ([nom_desc], [nom_apres] и [date_vig]) также."

Чтобы ответить на ваш второй вопрос, я действительно не вижу, как вы могли бы заставить его быть более интуитивным. SQL - это всего лишь сложный язык, чтобы иногда обдумывать голову, и, как и любой язык (будь то программирование или разговорный язык), требуется время, чтобы изучить его шаблоны и нюансы, прежде чем вам станет удобно читать его легко.

Смежные вопросы