2012-09-19 50 views
1

我有一個包含以下4個列的表:查詢SQL Server中檢索行

  • 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 

你可以糾正我的查詢和幫助我嗎?謝謝。

回答

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 
+0

坦了很多,我試圖接受的解決方案,但它撞到彈出,我必須等待8分鐘:) –

+2

你爲什麼要聲明一個變量,而不是使用一個簡單的JOIN查詢? – Sashenka

+0

@Sashenka:我只是去與OP的問題....我還沒有提供我的解決方案,因爲OP卡在那一部分....現在,OP知道如何在未來使用變量... –

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

你可以簡單地說

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

這將處理有多個記錄與ID的情況。如果ID是主鍵,則可以用=替換IN運營商。

1

試試這個:

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