在SQL中,如果where条件不产生结果,则获取其他行

时间:2013-08-27 08:12:23

标签: mysql sql

我有这样的查询

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

如果id:123和name:“tester”在表中不存在,我应该获取名为“tester”的其他行,丢弃条件“id”。如果它存在该id和名称的获取行。

伙计们,我知道这可以在程序中处理,我希望在我的查询中完成,如果你知道的话,请你停止投票并给我解决方案!!!

3 个答案:

答案 0 :(得分: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找到一个有效的例子。

答案 1 :(得分:0)

SELECT * FROM customers WHERE (id = 123 AND name like '%tester%') OR (name LIKE '%tester%') LIMIT 1;

它应该工作

答案 2 :(得分:0)

我来这里,检查一下

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

看到你将获得id = 3或name的所有行就像tester。从那里你将按布尔值(如果为真,则为1)按顺序排序,如果它们== 3.将此限制为1将获得最佳响应。

同样,如果你想获得所有结果,你可以删除限制,假设最上面的结果是最好的结果。如果第一个结果id不是= 3那么你可以说所有结果都是最佳匹配。