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

Needing multiple where clauses or a better way of conditional statement

我正在尝试弄清楚如何根据另一个 table 中是否存在值来显示一个 table 中的数据。我研究了案例陈述,但无法弄清楚它如何适用于我目前的情况。

我有两个 table,CompanyRequestOffTakeOver,我希望能够 CompanyRequestOff 中的 select 列,其中 TransactionID 相等,但 User 列不能相同。

任何帮助甚至指出正确的方向都会很有用谢谢。

CompanyRequestOff table 有这些列:

TransactionID
Requestee
RequestedDate
RequestedTimeSlot
RequestedPosition
RequestStatus
LastUpdate
Manager         

TakeOver table 有:

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 table 中的列,其中 TakeOver 中没有行 transactionID 但仅当它包含某个 TakeOver.RequestedUser值。

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

SELECT *
FROM CompanyRequestOff CRO
JOIN TakeOver TO on TO.TransactionID = CRO.TransactionID and TO.User <> CRO.User

更新以说明您的编辑:

I would like to display the columns that are in the CompanyRequestOff table where There is no row in TakeOver with that transactionID BUT only if it contains a certain TakeOver.RequestedUser value.

您可以使用 where transactionID not in 子句实现其中的 transactionID 部分:

SELECT *
FROM CompanyRequestOff
WHERE TransactionID not in 
     (SELECT TransactionID FROM TakeOver)

然后在用户部分添加:

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'

从您的问题来看,您似乎在 CompanyRequestOffTakeOver - UserTransactionID 之间有两个公共列。因此,您的查询应该是 select 来自 CompanyRequestOff 的所有记录,其中 TransactionID 匹配但 user 不匹配。

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