2014-12-04 154 views
0

检索 姓中任何位置带有字母'm'的所有员工的员工编号,姓氏和姓氏。还显示部门 的名称和位置。 建议:字母'm'可以是大写或小写。加入表 - 需要帮助

我想获得我需要的5行,但我不断收到20行,我已经使用了下面的代码,但我不知道我还需要做什么。我一直收到不相关的信息,无法找到两张表格之间的链接。

select emp_no, emp_surname, emp_forename, depart_name, depart_location 
from employee, department 
where emp_surname like 'M%' or emp_surname like '%m%'; 
+0

哪个版本的SQL?你回来的20行是什么?你可以在这里发布吗? – Mike 2014-12-04 15:49:29

+0

什么版本的sql? – bowlturner 2014-12-04 15:52:00

+0

它不会让我发布它,但我想我有一个笛卡尔产品,例如:约翰史密斯会计纽卡斯尔也约翰史密斯研究约克这是不正确的 – Adam 2014-12-04 15:52:22

回答

2

您正在创建两个表的笛卡尔乘积,因为没有条件设置哪些行在逻辑上属于一起。因此,创建了员工和部门的每种可能组合,然后您就可以完成您的选择。

要限制这一点,您需要指定员工地图中的哪一列到部门中的哪一列。

事情是这样的:

select emp_no, emp_surname, emp_forename, depart_name, depart_location 
from employee 
inner join department on employee.department_id = department.id 
where emp_surname like '%M%' or emp_surname like '%m%'; 
1

你需要emplyee和部门之间的连接,例如:

select e.emp_no, e.emp_surname, e.emp_forename, d.depart_name, d.depart_location 
from employee e, department d 
where e.emp_surname like 'M%' or e.emp_surname like '%m%' and .id = d.emplyee_id 
0

您必须使用内部连接,再搭配同列的值作为然后像m一样使用。 这是在SQL服务器中工作。

select emp_no, emp_surname, emp_forename, depart_name, depart_location 
from employee INNER JOIN department on employee.department_id = department.id 
where lower(emp_surname) like 'm%';