Как найти дубликаты записей из нескольких таблиц в MS Access на основе двух условий - PullRequest
0 голосов
/ 08 июля 2019

Как найти дубликаты записей из нескольких таблиц в MS Access по месяцам и столбцам ниже? Имя, текст, описание, описание теста

select [table1].[Name], [table1].[Text], [table1].[Description], [table1].[TestDescription] 
From [table1]
UNION ALL 
select  [table2].[Name], [table2].[Text], [table2].[Description], [table2].[TestDescription]
from [table2]
WHERE Table1.month IN ("April","May") and Table2.month IN ("April","May")
group by [table1].[Name], [table1].[Text], [table1].[Description], [table1].[TestDescription]
having count(*) > 1;

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Исходя из ваших комментариев к первому опубликованному ответу, если вы действительно хотите найти записи, которые появляются в обеих таблицах на основе четырех упомянутых вами полей, вы можете использовать join, например:

select t1.*
from 
    table1 t1 inner join table2 t2 on
    t1.name = t2.name and 
    t1.text = t2.text and
    t1.description = t2.description and
    t1.testdescription = t2.testdescription
where
    t1.month in ("April", "May")
0 голосов
/ 08 июля 2019

Каждый SELECT в UNION является отдельным запросом, поэтому вы не можете сделать два предложения WHERE внизу. Каждая часть должна иметь свое собственное ГДЕ, и каждая часть не знает о другой части (это вне контекста). Вместо этого обработайте весь набор результатов UNION как подзапрос для выполнения теста GROUP BY... HAVING:

SELECT *
FROM
    (
        SELECT [table1].[Name], [table1].[Text], [table1].[Description], [table1].[TestDescription] 
        FROM [table1]
        WHERE Table1.month IN ("April","May") 
        UNION ALL 
        SELECT  [table2].[Name], [table2].[Text], [table2].[Description], [table2].[TestDescription]
        FROM [table2]
        WHERE Table2.month IN ("April","May")
    ) AS myUnion
GROUP BY [myUnion].[Name], [myUnion].[Text], [myUnion].[Description], [myUnion].[TestDescription]
HAVING COUNT(*) > 1;
...