2

現在使用しているクエリに問題があります

LEFT JOIN weblog_data AS pwd 
  ON (pwd.field_id_41 != '' 
  AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

ただし、最初に完全に一致しない場合にのみそれを使用する必要があることを発見しています。何が起こっているかというと、 の使用によりクエリが二重に浸されているためLIKE、最初に完全一致をテストすると、二重の浸しの問題が回避されます。誰かが私にさらなるガイダンスを提供できますか?

4

4 に答える 4

2

最初に完全一致に基づいてスニペットでpwdおよびewdとしてエイリアスされたテーブルを結合し、それが失敗した場合は、現在の同様の比較に基づいて結合したいようです。

これを試して:

LEFT JOIN weblog_data AS pwd1 ON (pwd.field_id_41 != '' AND pwd.field_id_41 = ewd.field_id_32)
LEFT JOIN weblog_data AS pwd2 ON (pwd.field_id_41 != '' AND pwd.field_id_41 LIKE CONCAT('%', ewd.field_id_32, '%'))

次に、select句で、次のようなものを使用します。

select
  isnull(pwd1.field, pwd2.field)

ただし、pwdでnullになる可能性のあるフィールドを処理している場合は、問題が発生しますが、これは機能するはずです。

select
  case pwd1.nonnullfield is null then pwd2.field else pwd1.field end

また、pwd2に結合すると、結果セット内のデータを無視することになった場合でも、結果セットに行が追加されるため、groupbyを実行する必要があります。

于 2008-09-16T19:24:08.537 に答える
1

TSQL を使用して、完全一致を実行し、num of rows == 0 をチェックします。そうであれば、like を実行します。それ以外の場合は、like を実行しないか、完全一致の下に like の結果を追加します。

于 2008-09-16T19:14:39.950 に答える
1

あなたは短絡評価について話している。

次の記事をご覧ください: http://beingmarkcohen.com/?p=62

于 2008-09-16T19:11:42.717 に答える
0

私はコードでそれを行うことしか考えられません。完全一致を探します。結果が空の場合は、LIKE を探します。もう 1 つのオプションは、WHERE ({完全一致からのカウント}=0) のようなこのクエリ内の WHERE です。この場合、完全一致が 0 を超える結果を返す場合、LIKE との比較は行われません。しかし、それは非常に非効率的です...コードで意味のあるものを使用することはかなり難しいという事実は言うまでもありません。

私はIf(完全一致からのカウント= 0)を選択し、同様のクエリを実行します。それ以外の場合は、完全一致の結果を使用します。

于 2008-09-16T19:16:26.857 に答える