2016-03-07 31 views
0

我想弄清楚如何在一个表中显示数据,如果一个值不存在于另一个表中。我研究过病例报告,但无法弄清楚它将如何应用于我目前的情况。需要多个where子句或条件语句的更好的方式

我有两个表,CompanyRequestOffTakeOver,我希望能够从CompanyRequestOff选择列,其中TransactionID s为相等,但User列不能是相同的。

任何帮助甚至指出我在正确的方向将是有益的谢谢。

CompanyRequestOff表中有这些列:

TransactionID 
Requestee 
RequestedDate 
RequestedTimeSlot 
RequestedPosition 
RequestStatus 
LastUpdate 
Manager   

而且TakeOver表有:

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; 

唯一列与0123相关的是transactionID列和国外TakeOver。我想要显示CompanyRequestOff表中的列,其中TakeOver中没有与transactionID的行,但只有它包含某个TakeOver.RequestedUser值。

+1

难道这不就是连接上的复合条件吗? '选择*从CompanyRequestOff CRO LEFT JOIN takeOver TO TO.TransactionID = CRO.TransactionID和CRO.User <> TO。用户' – xQbert

回答

2

这听起来像你想join两种情况下,这两个表:

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

更新以解决您的编辑:

我想显示是在CompanyRequestOff列 表格其中TakeOver中没有与该事务ID相关的行但仅当它包含某个TakeOver.RequestedUser值时才有 。

您可以用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' 
+0

这不会显示我的数据,因为这显示我在哪里用户值是相同的,因为我想看看他们在哪里是不同的。 TakeOver用户和CompanyRequestOff用户决不是彼此的关系。 – DVNT

+0

已更新的答案。 –

+1

这工作!唯一的是我不得不将<>'@UserN'更改为='@UserN',因为您的方式将该用户名包含在TransactionID中,但是这对我非常感谢。 – DVNT

0

看着你的问题,似乎你有两个共同的列CompanyRequestOffTakeOver - UserTransactionID。因此,您的查询应该是这样的,以便您从CompanyRequestOff中选择所有记录,其中TransactionID匹配,但user不匹配。

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