在sql server中查询以检索行

时间:2012-09-19 17:32:46

标签: sql sql-server-2008 stored-procedures

我有一个包含以下4列的表:

  • ID
  • 名称
  • 名字
  • 电话

我想编写一个以id为参数的存储过程,然后获取该id的名称,然后使用该name获取其名称的所有行等于我在上一步找到的名字! 这是我的查询,我知道这是错的,但我是sql命令的新手:

ALTER PROCEDURE dbo.GetAllNames
@id int
AS
    select name as Name from Users where id = @id
    -- i don't how to retrieve the names that are equal to Name
select * from Users where name = Name 

你可以纠正我的疑问并帮助我吗?感谢。

4 个答案:

答案 0 :(得分:4)

SELECT by_name.name FROM Users AS by_id
  join Users AS by_name ON by_id.name = by_name.name
  where id = @id

答案 1 :(得分:1)

你可以简单地说

SELECT * FROM users WHERE name in (SELECT name from users where id = @id)

这将处理具有ID的多个记录的情况。如果ID是主键,则可以将IN运算符替换为=

答案 2 :(得分:1)

试试这个:

ALTER PROCEDURE dbo.GetAllNames
@Id INT
AS
BEGIN
    SELECT * FROM Users WHERE [Name] IN (SELECT [Name] FROM Users WHERE Id = @Id)
END

答案 3 :(得分:0)

您可以声明一个变量@name,您可以在其中存储名称....

 ALTER PROCEDURE dbo.GetAllNames
    @id int
    AS
    DECLARE @name nvarchar(50);
      select  @name =name from Users where id = @id;
      select * from Users where name =  @name;

我刚刚根据您的问题风格提供了上述解决方案,但我强烈建议您以下列方式在给定方案中使用JOIN:

  SELECT b.name FROM Users a
                INNER JOIN Users b
                ON a.name = b.name
   WHERE a.id = @id