你所拥有的东西(肯定是在 MS SQL Server 中的 SPROC 中)与次要的 mods 一起工作。
if @bool=0 then
select A.* from A
inner join B on B.id=A.id
else if @bool=1 then -- Or just else if @boll is limited to [0,1]
select A.* from A
INNER JOIN B on B.id=A.id
inner join C on C.id=A.id
但是,需要注意的是,SQL 参数嗅探将缓存它下行的第一个路径的计划,这对于通过代码的其他路径不一定是最佳的。
此外,如果您确实对您的 proc 采用这种“多重替代查询”方法,通常最好确保返回的列名和类型在所有情况下都是相同的(您的查询很好,因为它是 A.*)。
编辑
假设您使用的是 SQL Server,另一种方法是使用动态 sql:
DECLARE @sql NVARCHAR(MAX)
SET @sql = N'select A.* from A
inner join B on B.id=A.id'
IF @bool = 1
SET @sql = @sql + N' inner join C on C.id=A.id'
sp_executesql @sql
如果您需要添加过滤器等,请查看这篇文章:动态/以编程方式将 WHERE 子句添加到 SQL