1

住所を個々の部分に分割し、一致する項目を住所テーブルから返すメソッドを実装する必要があります。一致するものが見つからない場合は、どこで失敗したかを示す値を返せるようにしたいと考えています。各入力パラメーターには、テーブル内の対応するフィールドがあります。

署名は次のようになります。

List<Address> MatchAddress(string zipCode, string streetName, string houseNumber, string houseLetter, string floor, string appartmentNo, out int mismatchPosition)
{
  // return matching addresses
  // if none found, return the position where it stopped matching
  // zipCode is position 0, appartmentNo is position 5
  //
  // an empty param value indicates "don't check"
}

すべてのパラメーターから開始し、クエリを実行してから、一致が見つかるかパラメーターがなくなるまで (右側から) パラメーターごとにパラメーターを削除するようにメソッドを構築できることはわかっていますが、クエリを構築できますか?それよりも効果的です。つまり、データベースへの呼び出しの数を最小限に抑えます。

4

1 に答える 1

1

ケースステートメントといくつかのネストされたクエリを使用して、1 つのクエリで解決策を得ることができると思いますが、そこに行く前に、達成しようとしていることを理解できません。次のサンプル データ セットを想定します。

ID   House_Number    Street_Name   Zip_Code
=============================================
1            3012            Elm      10010
2             412            9th      10010
3             412           Main      90210
4             710           Main      60606

また、次のメソッド呼び出しを想定して、郵便番号、名前、番地を渡します。

MatchAddress('10010', 'Main', '710')

この場合、あなたは何を取り戻したいですか?あなたの署名には不一致の位置のシングルアウト変数がありますが、この例は、少なくとも 1 つの要素に関連する 4 つのレコードすべてに部分的に一致します。たとえば、レコード 1 には何を返しますか?たとえば、郵便番号には一致するが、house_number または street_name 属性には一致しない場合はどうでしょうか?

======================================

OK、あなたのコメントを見ました。これは、あなたにとって正しい道にあると私が思うクエリです。WHERE 句は、少なくとも 1 つの条件に一致する任意のレコードを返す一連の OR です。次に、case ステートメントは、渡された値と等しくない場所を確認します。明らかに、最も限定的な一致は主観的ですが、case ステートメントを並べ替えて、目的の一致基準を希望する順序に並べることができます。ここでMySQLデータベースでこれを機能させました。

SELECT address.*, CASE 
    WHEN zip_code <> '10010' THEN 'No match on Zip'
    WHEN street_name <> 'Elm' THEN 'No match on Street Name'
    WHEN house_number <> '29' THEN 'No match on House Number'
    ELSE 'Match on all elements'
  END AS zip_match
from address
where zip_code = '10010'
OR street_name = 'Elm'
OR house_number = '29'

ここでは、わかりやすくするためにかなり冗長なステートメントを返すようにしていますが、数値コードまたは意味のあるものを返すようにすることもできます。これは、大文字と小文字の区別などの問題も考慮していません。書かれているように、正確な大文字と小文字の一致も探しています。データベース環境またはデータの保存方法によっては、それが必要でない場合はそれに対処する必要がある場合があります。

于 2010-03-11T21:19:21.687 に答える