2017-12-06 19 views
1

MS Accessデータベースでは、2つのテーブル(EmployeeとEmployee_PROD)間の不一致(差異)レコードを見つけるために、UNION ALLを使用しています。次のようにクエリは次のとおりです。MS Accessで大文字と小文字を区別するグループを実行する方法

SELECT [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM 

(SELECT '[Employee]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee] 

UNION ALL 

SELECT '[Employee_PROD]' AS TableName,[COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] FROM [Employee_PROD]) 

GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name],[SUB_COMPANY] 
HAVING COUNT(*) = 1 AND MIN(TableName) = '[Employee]' 

私が直面しています問題はGROUP BYは、大文字と小文字の区別を考慮していないことです。たとえば、 "andrew"と "Andrew"は同じものとして扱われます。大文字と小文字を区別してグループを実行して差分レコードを探したい。

MS Accessでこれを行う方法はありますか?

同じ列名、データ型、およびレコード数を持つ2つのテーブルの違いが7,00,000かどうかを調べる方法はありますか? DataTable

  • データをロードして、違いを見つける:

    は、私は次のことを試してみました。膨大な量のデータが原因でメモリ不足例外が発生しました。

  • NOT EXISTSを使用して行を比較します。クエリがハングアップし、実行が完了しませんでした。
  • UNION ALLのアプローチが有効ですが、問題はGROUP BYで大文字と小文字の区別が考慮されていないことです。
+0

C#またはアクセス?? – Gustav

+0

私はMS AccessデータベースでC#OleDbConnection経由でクエリを実行しています。 –

+0

もしそうなら、私はアクセスでVBA関数を呼び出すことはできません。しかし、あなたが気にしているものなら、最初の文字のASCII値を選ぶことができます。後続の文字の場合は、MIDを使用して拡張することができます。 – Gustav

答えて

0

あなたは可能性がバイトの値によってグループ:

? StrToByte("Andrew") 
416E64726577 
? StrToByte("andrew") 
616E64726577 

それはあなたが持っている大量のデータと少し遅いかもしれませんが。唯一のSQLについては

Public Function StrToByte(ByVal strChars As String) As String 

    Dim abytChar() As Byte 
    Dim lngChar  As Long 
    Dim strByte  As String 

    abytChar() = StrConv(strChars, vbFromUnicode) 

    strByte = Space(2 * (1 + UBound(abytChar) - LBound(abytChar))) 
    For lngChar = LBound(abytChar) To UBound(abytChar) 
    Mid(strByte, 1 + 2 * lngChar) = Hex(abytChar(lngChar)) 
    Next 

    StrToByte = strByte 

End Function 

、あなただけの最初の文字程度あれば、試してみてください。

GROUP BY [COMPANY],[DEPT],[DOJ],[EMP_ID],[Name], ASC([Name]),[SUB_COMPANY] 
+0

それはC#からのものです(質問にはC#タグが付いていると仮定しています)ので、おそらくUFSを使用することはできません –

+0

私は気付きましたが、MS Accessで同じことをする方法はありますか? – Gustav

+0

このように、それは前提です。実際にアクセスするだけの場合は、C#タグを削除する必要があります。 –

0

あなたはオプションを指定することはできません大文字と小文字を区別検索を実行するモジュールでBINARYを比較?

このスレッドhttps://access-programmers.co.uk/forums/showthread.php?t=33962とこの1つはHow to write Case Sensitive Query for MS Access?の両方でそれぞれ異なる方法を説明しています。

+0

私は検索アクションを実行するのではなく、クエリごとにグループを実行します。 –

+0

お詫び申し訳ありませんが、私は質問の微妙な違いを逃した - これは助けるかもしれないhttps://support.microsoft.com/en-gb/help/244693/how-to-perform-a-case-ensitive-join-through-microsoft-ジェット – Minty

関連する問題