I have to select two tables data, One is PackageData
and another is PackageDataDetails
. Here is PackageData is Parent table and PackageDataDetails is child table.
See below code:
x
SELECT
PD.Id, PD.MemberId, PD.Merchant, PD.Weight, PD.Remarks
FROM
[dbo].[PackageData] PD
INNER JOIN
Account A ON A.MemberId = PD.MemberId
INNER JOIN
Users U ON U.Id = A.UserId AND (@UserId IS NULL OR U.Id = @UserId)
WHERE
(@Status IS NULL OR @Status = '' OR PD.SystemStatus = @Status)
AND (@Id IS NULL OR PD.Id = @Id)
ORDER BY
MD.Id
OFFSET @PageSize * (@PageNo+1 - 1) ROWS
FETCH NEXT @PageSize ROWS ONLY
OPTION (RECOMPILE);
SELECT
PDD.Id, PDD.PackageDataId, PDD.Description, PDD.Quantity, PDD.Status
FROM
[dbo].[PackageDataDetails] PDD
INNER JOIN
[dbo].[PackageData] PD ON PD.Id = PDD.PackageDataId
WHERE
PDD.PackageDataId IN ({PD.Id of Above Select query})
This code block is written in a stored procedure. Here, I didn’t want to rewrite the first query in where a condition of the second query.
I have to use this stored procedure in one API response to do things in one DB call only. Please share your idea to resolve this issue.
Advertisement
Answer
You can insert your first query data in table variable and then fetch the id from table variable in second query.Something like below.
Code:
Declare @tblData TABLE
(
Id Int,
MemberId Int,
Merchant NVARCHAR(Max),
Weight NVARCHAR(Max),
Remarks Nvarchar(Max)
);
Insert Into @tblData
(
Id,
MemberId,
Merchant,
Weight,
Remarks
)
SELECT PD.Id ,PD.MemberId, PD.Merchant,PD.Weight,PD.Remarks
FROM [dbo].[PackageData] PD
INNER JOIN Account A ON A.MemberId = PD.MemberId
INNER JOIN Users U ON U.Id = A.UserId AND (@UserId IS NULL OR U.Id = @UserId)
WHERE (@Status IS NULL OR @Status = '' OR PD.SystemStatus = @Status)
AND (@Id IS NULL OR PD.Id = @Id)
ORDER BY MD.Id
OFFSET @PageSize * (@PageNo+1 - 1) ROWS FETCH NEXT @PageSize ROWS ONLY OPTION (RECOMPILE);
SELECT PDD.Id, PDD.PackageDataId, PDD.Description, PDD.Quantity, PDD.Status
FROM [dbo].[PackageDataDetails] PDD
INNER JOIN [dbo].[PackageData] PD ON PD.Id = PDD.PackageDataId
WHERE PDD.PackageDataId IN (select Id from @tblData )