1

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

  • ID
  • 姓名
  • 电话

我想编写一个存储过程,它获取一个idas 参数,然后获取它的名称,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

4 回答 4

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
于 2012-09-19T17:37:10.987 回答
1

你可以简单地说

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

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

于 2012-09-19T17:37:36.920 回答
1

试试这个 :

ALTER PROCEDURE dbo.GetAllNames
@Id INT
AS
BEGIN
    SELECT * FROM Users WHERE [Name] IN (SELECT [Name] FROM Users WHERE Id = @Id)
END
于 2012-09-19T17:39:42.237 回答
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
于 2012-09-19T17:34:55.910 回答