我有以下存储过程
ALTER PROCEDURE [dbo].[bt_BizForSale_GetByID]
(
@ID int
)
AS
SET NOCOUNT ON
SELECT dbo.bt_BizForSale.UserID,
dbo.bt_BizForSale.VendorType,
dbo.bt_BizForSale.BusinessName,
dbo.bt_BizForSale.isEmailSubscriber,
dbo.bt_BizForSale.isIntermediarySubscriber,
dbo.bt_Regions.Region AS Country,
bt_Regions_1.Region AS Province,
bt_Regions_2.Region AS City,
dbo.bt_BizForSale.[AdType]
FROM dbo.bt_BizForSale INNER JOIN
dbo.bt_Regions ON dbo.bt_BizForSale.[61] = dbo.bt_Regions.ID INNER JOIN
dbo.bt_Regions AS bt_Regions_1 ON dbo.bt_BizForSale.[62] = bt_Regions_1.ID INNER JOIN
dbo.bt_Regions AS bt_Regions_2 ON dbo.bt_BizForSale.[63] = bt_Regions_2.ID
WHERE (dbo.bt_BizForSale.ID = @ID)
当我从表中使用 VALID ID 执行它时,它不会返回任何结果。我可能会错过什么?
PS:在“最”有效的ID上,我传递给存储过程,我得到了我正在寻找的结果。
示例:10010将返回结果,但10104不会。两者都是数据库中的有效记录。
答案 0 :(得分:3)
[61],[62],[63]列中的区域ID可能不在dbo.bt_Regions中(或者是NULL,永远不会满足任何相等条件)
INNER JOIN要求满足(相等)条件 - 因此必须找到一行
如果您的任何一个INNER JOIN没有满足条件,您将不会获得任何行。
当右侧没有满足连接条件的行时,您需要更正外键有效或更改为LEFT JOIN并适当处理NULL