1

私はそのような3つのテーブルを持っています

バググループ

ID        NAME        DESCRIPTION
--------------------------------------
1         Group1      Some description
2         Group2      Some description
3         Group3      Some description

バグ

ID        NAME        DESCRIPTION        BELONGSTO
--------------------------------------------------
1         Bug1        something          1
2         Bug2        something          1
3         Bug3        something          2

バグコメント

ID        BUGID       COMMENT
-----------------------------
1         1           something
2         1           something
3         2           something
4         2           something
5         3           something

2 つの結果セットを取得するストアド プロシージャを作成します。1 つは特定のバグ グループのすべてのバグを含み、もう 1 つはグループ内のすべてのバグのすべてのコメントを含みます。このBELONGSTOフィールドは、バグが属するグループを指定します。したがって、このクエリを実行したい場合、バグ グループ ID に 1 を渡すと、次の結果が期待されます

RESULT SET 1

ID        NAME         DESCRIPTION         BELONGSTO
----------------------------------------------------
1         Bug1         something           1
2         Bug2         something           1

RESULT SET 2

ID        BUGID        COMMENT
------------------------------
1         1           something
2         1           something
3         2           something
4         2           something

一時テーブルを使用する必要があると思いますが、これを行う方法がわかりません。これは私がこれまでに持っているものです(動作しません)

ALTER PROCEDURE bugs_getAllBugGroupData
    @groupid int
AS
BEGIN
    DECLARE @bugids TABLE (id int)
    INSERT @bugids
    SELECT id FROM bugs
    WHERE belongsto = @groupid

    SELECT * FROM bugs WHERE belongsto = @groupid
    SELECT * FROM bugs_comments WHERE bugid IN (@bugids)
END
GO

表示されるエラー メッセージは、最後の select ステートメントで「スカラー変数 @bugids を宣言する必要があります」です。

4

2 に答える 2

2

この行

SELECT * FROM bugs_comments WHERE bugid IN (@bugids)

である必要があります

SELECT * FROM bugs_comments WHERE bugid IN (SELECT id FROM @bugids).

ただし、補助テーブルは必要ありません。結合を使用して直接クエリを実行できます。

1.

SELECT * FROM bugs WHERE belongsto = @groupid

2.

SELECT * FROM bugs_comments AS bc
    INNER JOIN bugs AS b ON (bc.bugid = b.id)
    WHERE b.belongsto = @groupid
于 2012-05-15T01:13:08.900 に答える
0

より効率的な方法は...

SELECT  ID,
        Name,
        Description,
        BelongsTo
  FROM  bugs
 WHERE  BelongsTo =  @groupid 

SELECT  bc.ID,
        bc.BugID,
        bc.Comment
  FROM  bug_comments bc
        JOIN bug b ON b.BugId = bc.BugID AND b.BelongsTo = @groupid
于 2012-05-15T01:17:07.177 に答える