我有这个sql语句
SELECT * FROM customers WHERE first_name LIKE ?
它根据名字从搜索字段中选择客户。我也想按姓氏搜索,但我做不到。 我使用此代码,但不起作用
SELECT * FROM customers WHERE (first_name LIKE ?) OR (last_name LIKE ?)
有什么建议吗?
答案 0 :(得分:1)
您的第二个查询:
SELECT *
FROM customers
WHERE (first_name LIKE ?) OR (last_name LIKE ?)
应该可以-但您需要两次传入参数。您可以使用命名参数解决此问题:
SELECT *
FROM customers
WHERE (first_name LIKE :pattern) OR (last_name LIKE :pattern)
或通过使用子查询/ CTE:
SELECT c.*
FROM customers c CROSS JOIN
(SELECT ? as pattern) p
WHERE (c.first_name LIKE p.pattern) OR (c.last_name LIKE p.pattern);
或者,您可以用一个表达式实现几乎等效的逻辑:
SELECT *
FROM customers
WHERE first_name || ' ' || last_name LIKE '%' || ? || '%';
后者并不完全等效,但是在许多情况下都是等效的。