5

[nom_lab]、[nom_desc]、[nom_apres]、[date_vig]、[cod_med]、[vr_pmc] の 6 つのフィールドを持つ tbl_med という名前のテーブルがあるとします。

次のような MS Access SQL クエリが必要です。

  1. [nom_lab]、[nom_desc]、[nom_apres]、[date_vig] の 4 つのフィールドに関連する重複レコードを検索します。
  2. 6 つのフィールドすべてを表示します (重複のチェックに使用されるフィールドだけではありません)。

MS Access の "Find Duplicates Query Wizard" を使用すると、次の 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上記の横罫線の間の3 つの条件が必要な理由を説明できる人はいますか?

理解しやすい、より直感的なクエリを持っている人はいますか?

4

1 に答える 1

1

基本的に、3 つの句が存在するのは、クエリ ウィザードに、フィールドだけでなく、、、およびフィールド (質問の冒頭で述べたように)Andの重複もチェックするように指示したためです。[nom_lab][nom_desc][nom_apres][date_vig]

サブクエリのSELECT [nom_lab] FROM [tbl_med] As Tmp ... HAVING Count(*)>1部分は、重複する値を持つレコードを探すように指示し[nom_lab]ます。句は、 「重複する値を持つことに加えて、これらの他の 3 つのフィールド ( 、、および) にも重複があるレコードのみを表示したいAnd」と実質的に言うことで、要求された重複基準の残りを満たします。[nom_lab][nom_desc][nom_apres][date_vig]

2番目の質問に答えるために、どうすればより直感的になるように強制できるのか、私には本当にわかりません。SQL は、頭で理解するのが難しい言語であり、他の言語と同様 (プログラミング言語であろうと音声言語であろうと)、簡単に読めるようになるまでにはパターンやニュアンスを学ぶのに時間がかかります。

于 2013-01-30T18:37:11.740 に答える