2

我有这样的声明:

select lastname,firstname,email,floorid 
from employee 
where locationid=1 
    and (statusid=1 or statusid=3) 
order by floorid,lastname,firstname,email

问题是列 floorid。此查询的结果显示楼层的 ID。

有一个名为 floor 的表(大约有 30 行),其中包含列 id 和 floornumber。floorid(在上面的语句中)值与表层的 id 匹配。

我希望上面的查询将 floorid 值切换为 floor 表中 floornumber 列的关联值。

谁能告诉我如何做到这一点?我正在使用 Microsoft sql server 2008 r2。

我是 sql 新手,如果可能的话,我需要一个清晰易懂的方法。

4

3 回答 3

5
select   lastname,
         firstname,
         email,
         floor.floornumber
from     employee
inner join floor on floor.id = employee.floorid
where    locationid = 1
         and (statusid = 1 or statusid = 3)
order by floorid, lastname, firstname, email
于 2012-08-01T15:05:19.550 回答
1

如果 floorid 与地板表的 id 匹配,您必须在检查的地方进行简单的连接。然后你使用表层的楼层号。

select a.lastname,a.firstname,a.email,b.floornumber 
from employee a
join floor b on a.floorid = b.id
where a.locationid=1 and (a.statusid=1 or a.statusid=3) 
order by a.floorid,a.lastname,a.firstname,a.email
于 2012-08-01T15:06:20.387 回答
1

您需要使用join
这将在某个字段上连接两个表。
这样,您一次可以SELECT从多个表中获取列。

当您连接两个表时,您必须指定要连接它们的列。
在您的示例中,您必须这样做:
from employee join floor on employee.floorid = floor.id

由于您是 SQL 新手,因此您必须知道一些事情。对于您在这个问题上的其他 enaswer,人们使用aliases而不是重复表名。
from employee a join floor b
意味着从现在开始,桌子的雇员将被称为a,桌子的地板被称为b。当您有很多连接要做时,这非常有用。

现在假设两个表都有一个 column name。在您的选择中,您必须说出要从哪个表中选择列名。如果您只编写此
SELECT name from Employee a join floor b on a.id = b.id
代码,编译器将无法理解您要从哪个表中获取该列name。您必须像这样指定它:
SELECT Employee.name from Employee a join floor b on a.id = b.id
或者如果您更喜欢使用别名:
SELECT a.name from Employee a join floor b on a.id = b.id

最后有许多类型的连接。

  • 内连接(您正在使用的内容,因为只需键入即可Join引用内连接。
  • 左外连接
  • 右外连接
  • 自加入
  • ...

应该参考这篇关于连接的文章来了解如何正确使用它们。
希望这可以帮助。

于 2012-08-01T15:19:49.630 回答