需要多个 where 子句或更好的条件语句方式
Needing multiple where clauses or a better way of conditional statement
我正在尝试弄清楚如何根据另一个 table 中是否存在值来显示一个 table 中的数据。我研究了案例陈述,但无法弄清楚它如何适用于我目前的情况。
我有两个 table,CompanyRequestOff
和 TakeOver
,我希望能够 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'
从您的问题来看,您似乎在 CompanyRequestOff
和 TakeOver
- User
和 TransactionID
之间有两个公共列。因此,您的查询应该是 select 来自 CompanyRequestOff
的所有记录,其中 TransactionID
匹配但 user
不匹配。
select c.* from CompanyRequestOff c, TakeOver t
where c.TransactionId = t.TransactionId
and c.user != t.user
我正在尝试弄清楚如何根据另一个 table 中是否存在值来显示一个 table 中的数据。我研究了案例陈述,但无法弄清楚它如何适用于我目前的情况。
我有两个 table,CompanyRequestOff
和 TakeOver
,我希望能够 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'
从您的问题来看,您似乎在 CompanyRequestOff
和 TakeOver
- User
和 TransactionID
之间有两个公共列。因此,您的查询应该是 select 来自 CompanyRequestOff
的所有记录,其中 TransactionID
匹配但 user
不匹配。
select c.* from CompanyRequestOff c, TakeOver t
where c.TransactionId = t.TransactionId
and c.user != t.user