mySQL搜索函数返回无效结果

时间:2014-12-12 11:58:58

标签: mysql sql phpmyadmin

当运行SQL命令来搜索小型数据库(用于我正在学习的测试)时,它给了我非常奇怪的结果。你能看出我的命令有什么问题吗?

SELECT * FROM users,departments WHERE name LIKE '%Alex%' OR lastname LIKE '%Alex%' OR email LIKE '%Alex%' AND departments.departmentid = users.departmentid

如下所示,当每个用户只注册一个用户时,它会显示在所有部门中搜索的用户。

搜索查询和结果 Search Query 用户表
Users Table 部门表
Departments Table

4 个答案:

答案 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;