ランキングを維持するために、自然な秩序を保ちたいところを探しています。これが私のコードクエリです:
SELECT buyer_id, first, last, ALLTRIM(address) AS address1, city, state FROM BUYERMAST.DBF WHERE first = '{0}' AND last = '{1}' UNION
SELECT buyer_id, first, last, ALLTRIM(address) AS address1, city, state FROM BUYERMAST.DBF WHERE phone = '{6}' UNION
SELECT buyer_id, first, last, ALLTRIM(address) AS address1, city, state FROM BUYERMAST.DBF WHERE first LIKE '{0}' AND last LIKE '{1}' UNION
SELECT buyer_id, first, last, ALLTRIM(address) AS address1, city, state FROM BUYERMAST.DBF WHERE address LIKE '{2}' AND city LIKE '{3}' UNION
SELECT buyer_id, first, last, ALLTRIM(address) AS address1, city, state FROM BUYERMAST.DBF WHERE first = '{0}' OR last = '{1}' OR address = '{2}' OR city = '{3}' OR state = '{4}' OR zip = '{5}' OR phone = '{6}' or email = '{7}'"
ユニオンの最初の選択は完全一致を返しますが、最後の選択は非常に一般的な一致を返します。問題は、結果が常にbuyer_idでソートされて返されることです。既存のテーブル/インデックスを変更できません。buyer_idが最初のインデックスであるインデックスがいくつかあることがわかります。可能であれば、インデックスの順序を「無効」にして、最初の選択の結果が最初に返され、後続の選択が実際に前の選択に追加されるようにします。これは可能ですか?
PSデフォルトでは、ユニオンは区別されます。各選択に「ランク」列を追加して並べ替えると、ランク列が各選択クエリ間で区別されるため、結果が重複したままになります。