Nat*_*tBr 5 ms-access duplicate-data
假设我有一个名为tbl_med的表,它有六个字段:[nom_lab],[nom_desc],[nom_apres],[date_vig],[cod_med],[vr_pmc].
我想要一个MS Access SQL查询,它将:
我使用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
Run Code Online (Sandbox Code Playgroud)
And [nom_desc] = [tbl_med].[nom_desc]
And [nom_apres] = [tbl_med].[nom_apres]
And [date_vig] = [tbl_med].[date_vig]
Run Code Online (Sandbox Code Playgroud)
)
ORDER BY tbl_med.[nom_lab], tbl_med.[nom_desc], tbl_med.[nom_apres], tbl_med.[date_vig];
Run Code Online (Sandbox Code Playgroud)
谁能解释为什么And上面的水平规则线之间的三个条件是必要的?
有没有人有更直观的查询,这将更容易理解?
本质上,这三个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 只是一种有时很难让您理解的语言,并且像任何语言(无论是编程语言还是口语)一样,需要时间来学习它的模式和细微差别,然后才能轻松地阅读它。