我有一个包含以下4列的表:
我想编写一个以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
你可以纠正我的疑问并帮助我吗?感谢。
答案 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