-3

私はこのようなクエリを持っています

Select * from customers where id = 123 and name like '%tester%';

id : 123 および name : "tester" がテーブルに存在しない場合、条件 "id" を破棄して "tester" という名前の他の行をフェッチする必要があります。存在する場合は、その ID と名前の行をフェッチします。

これはプログラムで処理できることを知っています。クエリでこれを実行したいのですが、投票を停止して、知っている場合は解決策を教えてください!!!

4

3 に答える 3

5

次のようなことを試すことができます:

SELECT * 
FROM   CUSTOMERS 
WHERE  ( ID = 123 
         AND NAME LIKE '%tester%' ) 
        OR ( NAME LIKE '%tester%' 
             AND NOT EXISTS (SELECT * 
                             FROM   CUSTOMERS 
                             WHERE  ID = 123 
                                    AND NAME LIKE '%tester%') ) 

SQL Fiddleで実際の例を見つけることができます。

于 2013-08-27T08:23:22.673 に答える
0

私はここで手に入れました、それをチェックしてください

Select * from customers where id = 3 or name like '%tester%'
     order by id=3 desc limit 1;

id= 3 または name が tester のようなすべての行が取得されることを確認してください。そこから、ブール値 (true の場合は 1) と if they == 3 で並べ替えます。これを 1 の結果に制限すると、最良の応答のみが得られます。

同様に、制限を削除できるすべての結果を取得したい場合は、一番上の結果が最良の結果であると想定してください。最初の結果 ID が 3 でない場合、すべての結果がベスト マッチであると言えます。

于 2013-08-27T08:24:30.370 に答える