Sql 如何对具有新字段的另一个联接的结果使用联接
我有两个表vehicle1,其中包含不同类型车辆的详细信息,并有一个独特的批次,另一个表wishlist有两个字段lot和一个用户ID 我想做的是返回一个vehicle1表,其中添加了一个额外的字段,比如标志,其值为1或0,对应于用户ID是否已将该车辆添加到愿望列表中 我用过这个Sql 如何对具有新字段的另一个联接的结果使用联接,sql,sql-server,database,tsql,join,Sql,Sql Server,Database,Tsql,Join,我有两个表vehicle1,其中包含不同类型车辆的详细信息,并有一个独特的批次,另一个表wishlist有两个字段lot和一个用户ID 我想做的是返回一个vehicle1表,其中添加了一个额外的字段,比如标志,其值为1或0,对应于用户ID是否已将该车辆添加到愿望列表中 我用过这个 ALTER PROCEDURE [dbo].[get_AllVehicleModified] @user varchar(50), @limit varchar(30) AS BEGIN SELECT ad.*
ALTER PROCEDURE [dbo].[get_AllVehicleModified]
@user varchar(50),
@limit varchar(30)
AS
BEGIN
SELECT ad.*
FROM (
SELECT *,CASE WHEN t1.lot# IN (t2.lot_) THEN 1 ELSE 0 END Flag
FROM vehicle1 t1
FULL OUTER JOIN wishlist t2 ON t1.lot#=t2.lot_ WHERE t2.userid=@user ) ad
ORDER BY lot#
OFFSET (@limit - 1)*10 ROWS
FETCH NEXT 10 ROWS ONLY;
END
此查询包含一个新字段标志的结果,该标志包含1,并且仅包含愿望列表中的车辆
但是,我需要整个vehicle1表,它在剩余的表中包含0
如何实现这一点?我认为您需要一个
左连接和条件逻辑:
select v.*, case when w.lot# is null then 0 else 1 end flag
from vehicle v
left join whishlist w on w.userid = @user and w.lot# = v.lot_
您可以轻松地将此查询集成到存储过程中,并添加行限制子句。我建议使用EXISTS
:
SELECT v.*,
(CASE WHEN EXISTS (SELECT 1
FROM wishlist wl
WHERE v.lot# = wl.lot_ AND
wl.userid = @user
)
THEN 1 ELSE 0
END) as Flag
FROM vehicle1 v
ORDER BY v.lot#
OFFSET (@limit - 1)*10 ROWS
FETCH NEXT 10 ROWS ONLY;
我认为它更好地抓住了你想要的逻辑。我还怀疑,如果使用orderby
和FETCH
,它可能会工作得更好