当运行SQL命令来搜索小型数据库(用于我正在学习的测试)时,它给了我非常奇怪的结果。你能看出我的命令有什么问题吗?
SELECT * FROM users,departments WHERE name LIKE '%Alex%' OR lastname LIKE '%Alex%' OR email LIKE '%Alex%' AND departments.departmentid = users.departmentid
如下所示,当每个用户只注册一个用户时,它会显示在所有部门中搜索的用户。
搜索查询和结果
用户表
部门表
答案 0 :(得分:1)
试试这个:
SELECT * FROM users,departments WHERE (name LIKE '%Alex%' OR lastname LIKE '%Alex%' OR email LIKE '%Alex%') AND departments.departmentid = users.departmentid
你必须围绕or
陈述括号。
答案 1 :(得分:1)
首先,使用带有join
子句的显式on
条件。如果您正在学习SQL,那么您应该正确学习它。
SELECT *
FROM users JOIN
departments
ON departments.departmentid = users.departmentid
WHERE name LIKE '%Alex%' OR lastname LIKE '%Alex%' OR email LIKE '%Alex%';
这将解决您的问题,也可以通过使用括号对比较进行分组来解决。但是,修复join
是正确的做法。
答案 2 :(得分:1)
为什么你可以在这里试试inner join
SELECT * FROM `user` as usr
INNER JOIN `department` as dprt on usr.departmentid =dprt.departmentid
WHERE usr.name LIKE '%Alex%' OR usr.lastname LIKE '%Alex%' OR usr.email LIKE '%Alex%'
希望这会起作用
答案 3 :(得分:0)
您可能希望在查询中使用括号:
SELECT *
FROM users, departments
WHERE (name LIKE '%Alex%' OR lastname LIKE '%Alex%' OR email LIKE '%Alex%')
AND departments.departmentid = users.departmentid;