Sql 需要多个where子句或更好的条件语句方式

Sql 需要多个where子句或更好的条件语句方式,sql,tsql,conditional,Sql,Tsql,Conditional,我试图根据另一个表中是否不存在值来确定如何在一个表中显示数据。我研究过案例陈述,不知道如何将其应用于我目前的情况 我有两个表,CompanyRequestOff和TakeOver,我希望能够从CompanyRequestOff中选择TransactionID相等但用户列不能相同的列 任何帮助,哪怕是给我指出正确的方向,都会很有用的,谢谢 CompanyRequestOff表包含以下列: TransactionID Requestee RequestedDate RequestedTimeSlot

我试图根据另一个表中是否不存在值来确定如何在一个表中显示数据。我研究过案例陈述,不知道如何将其应用于我目前的情况

我有两个表,CompanyRequestOff和TakeOver,我希望能够从CompanyRequestOff中选择TransactionID相等但用户列不能相同的列

任何帮助,哪怕是给我指出正确的方向,都会很有用的,谢谢

CompanyRequestOff表包含以下列:

TransactionID
Requestee
RequestedDate
RequestedTimeSlot
RequestedPosition
RequestStatus
LastUpdate
Manager         
接管表包括:

Id
TransactionID
RequestedUser
RequestStatus
LastUpdate
Manager
这是我试图解决的问题:

SELECT
    CompanyRequestOff.TransactionID, CompanyRequestOff.Requestee,
    CompanyRequestOff.RequestedDate, CompanyRequestOff.RequestedTimeSlot,
    CompanyRequestOff.RequestedTimeSlot, CompanyRequestOff.RequestedPosition,
    CompanyRequestOff.RequestStatus, CompanyRequestOff.LastUpdate, 
    CompanyRequestOff.Manager 
FROM
    CompanyRequestOff, TakeOver 
WHERE
    RequestedDate > GETDATE() 
    AND CompanyRequestOff.RequestStatus = 'Requested' 
    AND CompanyRequestOff.TransactionID = TakeOver.TransactionID  
    AND TakeOver.RequestedUser != @UserN;

唯一相关的列是transactionID列,它在CompanyRequestOff中是主列,在TakeOver中是外部列。我想显示CompanyRequestOff表中的列,其中TakeOver中没有具有该transactionID的行,但前提是该行包含某个TakeOver.RequestedUser值。

听起来您想在两个条件下连接这两个表:

SELECT *
FROM CompanyRequestOff CRO
JOIN TakeOver TO on TO.TransactionID = CRO.TransactionID and TO.User <> CRO.User
然后在用户部分中添加:

SELECT *
FROM CompanyRequestOff
WHERE TransactionID not in 
    (SELECT TransactionID FROM TakeOver WHERE RequestedUser <> @UserN)
根据查询中的所有逻辑:

SELECT *
FROM CompanyRequestOff
WHERE TransactionID not in 
    (SELECT TransactionID FROM TakeOver WHERE RequestedUser <> @UserN)
AND RequestedDate > GETDATE()
AND RequestStatus = 'Requested'

听起来您希望在两种情况下联接这两个表:

SELECT *
FROM CompanyRequestOff CRO
JOIN TakeOver TO on TO.TransactionID = CRO.TransactionID and TO.User <> CRO.User
然后在用户部分中添加:

SELECT *
FROM CompanyRequestOff
WHERE TransactionID not in 
    (SELECT TransactionID FROM TakeOver WHERE RequestedUser <> @UserN)
根据查询中的所有逻辑:

SELECT *
FROM CompanyRequestOff
WHERE TransactionID not in 
    (SELECT TransactionID FROM TakeOver WHERE RequestedUser <> @UserN)
AND RequestedDate > GETDATE()
AND RequestStatus = 'Requested'

看看你的问题,在CompanyRequestOff和TakeOver之间似乎有两个公共列-User和TransactionID。因此,您的查询应该是这样的:您从CompanyRequestOff中选择TransactionID匹配但用户不匹配的所有记录

select c.* from CompanyRequestOff c, TakeOver t
where c.TransactionId = t.TransactionId 
and c.user != t.user

看看你的问题,在CompanyRequestOff和TakeOver之间似乎有两个公共列-User和TransactionID。因此,您的查询应该是这样的:您从CompanyRequestOff中选择TransactionID匹配但用户不匹配的所有记录

select c.* from CompanyRequestOff c, TakeOver t
where c.TransactionId = t.TransactionId 
and c.user != t.user

它不能只是连接的复合条件吗?选择*from CompanyRequestOff CRO LEFT JOIN takeOver TO on TO.TransactionID=CRO.TransactionID和CRO.User TO.users这难道不是连接的复合条件吗?选择*from CompanyRequestOff CRO LEFT JOIN takeOver TO on TO.TransactionID=CRO.TransactionID和CRO.User TO.Users这不会为我显示数据,因为这会显示用户值在哪里相同,我希望看到它们在哪里不同。接管用户和CompanyRequestOff用户之间没有任何关系。这很有效!唯一的一件事是我必须将“@UserN”改为=”@UserN”,因为您的方式包括了带有该用户名的TransactionID,但这帮了我很大的忙,谢谢。这不会为我显示数据,因为这会显示用户值在何处相同,而我希望看到它们在何处不同。接管用户和CompanyRequestOff用户之间没有任何关系。这很有效!唯一的一件事是我必须将'@UserN'更改为='@UserN',因为您的方式包括了带有该用户名的TransactionID,但这帮了我很大的忙,谢谢。