Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何对具有新字段的另一个联接的结果使用联接_Sql_Sql Server_Database_Tsql_Join - Fatal编程技术网

Sql 如何对具有新字段的另一个联接的结果使用联接

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.*

我有两个表vehicle1,其中包含不同类型车辆的详细信息,并有一个独特的批次,另一个表wishlist有两个字段lot和一个用户ID 我想做的是返回一个vehicle1表,其中添加了一个额外的字段,比如标志,其值为1或0,对应于用户ID是否已将该车辆添加到愿望列表中 我用过这个

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
,它可能会工作得更好