我有一个包含三列的表:id
,first
和last
。
我想找到SAM' SAM的所有记录。是在第一个或最后一个领域。
我不是MySQL的专家,但在我看来,可以使用LIKE
运算符查询一个字段。
如何在查询中使用LIKE
同时从两列中获取数据?
我试过这个:
SELECT id
FROM `employees`
WHERE 'first' like 'SAM' OR 'last' like 'SAM'
但是我得到了消息"你的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获得正确的语法。"
答案 0 :(得分:1)
我在您发布的查询中看不到任何语法错误。你所拥有的非常接近。
您的查询不是要比较列的内容;它比较字符串文字,因为单引号,这些是字符串,而不是列引用。
LIKE
比较相当于相等比较,因为右侧字符串中没有任何通配符。 '%'
字符是一个匹配任意数量字符的通配符。
要返回列first
或last
中包含字符串" SAM"的行,您可以执行以下操作:
SELECT e.id FROM employees e WHERE e.first LIKE '%SAM%' OR e.last LIKE '%SAM%'
该查询将匹配以下任何示例行:
id first last
-- --------- -------
2 Flotsam
3 Samson
5 Sesame
7 Yosemite Sam
答案 1 :(得分:1)
我似乎无法弄清楚为什么会出现语法错误,但查询的一个问题是,在列名称周围加上单引号会导致它被视为字符串文字而不是列名。
我的意思是,不是将first
列中的值与字符串'SAM'进行比较,而是比较两个字符串,'first'和'SAM'是不同的。此查询将不返回任何结果。
此外,只有当名字或姓氏等于sam时,这才有效。要在任何点检查这些字符作为子字符串,我会在字符串的前面和后面添加通配符。
试试这个:
SELECT id
FROM employees
WHERE first LIKE '%SAM%' OR last LIKE '%SAM%'
这是一个SQL Fiddle来展示它是如何运作的。