-3

我有这样的查询

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

如果 id : 123 和 name : "tester" 在表中不存在,我应该获取名称为 "tester" 的其他行丢弃条件 "id"。如果存在该 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 = 123 AND name like '%tester%') OR (name LIKE '%tester%') LIMIT 1;

它应该工作

于 2013-08-27T08:21:22.047 回答
0

我在这里,检查它

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

看到您将获得所有具有 id= 3 或名称的行就像 tester。从那里您将按布尔值(如果为真,则为 1)按它们 == 3 排序。将其限制为 1 个结果只会让您获得最佳响应。

同样,如果您想获得所有结果,您可以取消限制,假设顶部是最好的结果。如果第一个结果 id 不是 = 3,那么您可以说所有结果都是最佳匹配。

于 2013-08-27T08:24:30.370 回答