我有这样的查询
Select * from customers where id = 123 and name like '%tester%';
如果id:123和name:“tester”在表中不存在,我应该获取名为“tester”的其他行,丢弃条件“id”。如果它存在该id和名称的获取行。
伙计们,我知道这可以在程序中处理,我希望在我的查询中完成,如果你知道的话,请你停止投票并给我解决方案!!!
答案 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那么你可以说所有结果都是最佳匹配。