sql - How to use result of first query in second query where condition?
问题描述
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:
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.
解决方案
您可以在表变量中插入第一个查询数据,然后在第二个查询中从表变量中获取 id。如下所示。
代码:
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 )
推荐阅读
- python - 通过 Python 将 .csv 上传到 Teradata 时出现错误:无法在关闭的游标上执行操作
- google-apps-script - G 表目录脚本
- emscripten - 安装 emscripten 时 AppInstallerPythonRedirector.exe 已停止工作
- node.js - 如何在动态路由上设置 http-proxy-middleware?
- java - 如何实时修改 View-pager
- ionic-framework - Ionic AppFlow - 使用 iOS 推送通知构建
- git - 有人知道如何让 github ssh 在 2019 年 12 月在 WSL(Linux 的 Windows 子系统)上正确工作
- google-bigquery - 带有字符串类型列的 where 子句中的 BigQuery 错误
- gcc - 配置命令中包含路径时找不到头文件
- flutter - 在扩展类型和普通类型之间颤动动画 FAB