我有这样的查询
Select * from customers where id = 123 and name like '%tester%';
如果 id : 123 和 name : "tester" 在表中不存在,我应该获取名称为 "tester" 的其他行丢弃条件 "id"。如果存在该 ID 和名称的获取行。
伙计们,我知道这可以在程序中处理,我希望在我的查询中完成,如果你知道,请停止投票并给我解决方案!
你可以尝试这样的事情:
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上找到一个工作示例。
SELECT * FROM customers WHERE (id = 123 AND name like '%tester%') OR (name LIKE '%tester%') LIMIT 1;
它应该工作
我在这里,检查它
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,那么您可以说所有结果都是最佳匹配。