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 を持つ複数のレコードが存在する場合が処理されます。INID が主キーの場合、演算子を に置き換えることができます=

于 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 に答える