sql server - 如何修改查询语句中的值?

时间:2012-08-01 15:02:18

标签: sql sql-server select sql-server-2008-r2

我有这样的陈述:

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 table中floornumber列的关联值。

有人能告诉我该怎么做吗? 我正在使用Microsoft sql server 2008 r2。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

如果floorid匹配你的楼层表的id,你必须在你检查的地方做一个简单的连接。然后你使用桌子的floornumber。

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

答案 2 :(得分:1)

您需要使用join 这将在某个字段上加入两个表格 这样,您当时可以从多个表中SELECT列。

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

由于您不熟悉SQL,因此必须了解一些事项。对于此问题的其他人,人们使用aliases而不是重复表名 from employee a join floor b
表示从现在开始,员工名称为a,表格为b。当你有很多连接时,这非常有用。

现在假设两个表都有一列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即可引用内部联接。
  • 左外连接
  • 右外连接
  • 自我加入
  • ...

要引用this article about joins以了解如何正确使用它们。
希望这会有所帮助。