我在过去两天使用存储过程和SQL 2008时遇到了一些挑战。
我采取了几种方法,但必须做空。
一个非常有趣的appraoch是使用表减法。
这完全是关于表减法的。
我想知道你是否可以帮我解决这个问题。
这是挑战:
两个表1Testdb和2Testdb。
我的第一步是在表2Testdb上为一个给定的个体([2Testdb] .Bus_id)选择ID关系([2Testdb] .Acc_id)。然后查询表1Testdb以获取未从2Testdb计算原始选择的记录。
但欢迎其他方法。
数据和结构:
USE [Challengedb]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo]。[1Testdb](
[Acc_id] [uniqueidentifier] NULL
[Name] [Varchar(10)] NULL
)ON [PRIMARY]
GO
CREATE TABLE [dbo]。[2Testdb](
[Acc_id] [uniqueidentifier] NULL,
[Bus_id] [uniqueidentifier] NULL
)ON [PRIMARY]
GO
1Testdb上的记录:
34455F60-9474-4521-804E-66DB39A579F3,John
C23523F6-2309-4F58-BB3F-EF7486C7AF8B,Pete
DC711615-3BE4-4B31-9EF2-B1314185CA62,戴夫
E3AAB073-2398-476D-828B-92829F686A4C,Adam
2Testdb上的记录:(关系表,例如朋友关系)
记录#1:DC711615-3BE4-4B31-9EF2-B1314185CA62,34455F60-9474-4521-804E-66DB39A579F3
记录#2:E3AAB073-2398-476D-828B-92829F686A4C,34455F60-9474-4521-804E-66DB39A579F3
记录#3:DC711615-3BE4-4B31-9EF2-B1314185CA62,E3AAB073-2398-476D-828B-92829F686A4C
记录#4:E3AAB073-2398-476D-828B-92829F686A4C,DC711615-3BE4-4B31-9EF2-B1314185CA62
挑战:从表1Testdb中仅选择那些与表2Testdb上的John [34455F60-9474-4521-804E-66DB39A579F3]没有关系的记录。
预期结果应该是(约翰与谁没有关系?):
C23523F6-2309-4F58-BB3F-EF7486C7AF8B,Pete
谢谢你, 的Valentin
答案 0 :(得分:0)
不确定你在问什么;是第一个表中的所有用户都没有基于第二个表与“John”的友谊?
如果是,请使用“not exists”关键字来确定给定查询是否存在记录:
select a.*
from [1testdb] a
where not exists (
select * from [2testdb] b where a.acc_id = b.acc_id and b.subid = '34455F60-9474-4521-804E-66DB39A579F3'
)
and a.acc_id <> '34455F60-9474-4521-804E-66DB39A579F3'
答案 1 :(得分:0)
我不确定您的列是如何设置的......看起来像GUID,但这是使其工作的SQL Server语法。我包含了一个案例,其中John可能位于Acc_id或Bus_id列中,因此这就是为什么有2个连接而不是1个连接。
Declare @id NVarchar(50)
Set @id = '34455F60-9474-4521-804E-66DB39A579F3'
Select *
From 1Testdb
Left Outer Join 2Testdb As ForwardRelationship On ForwardRelationship.Acc_id = @id And ForwardRelationship.Bus_id = 1Testdb.Acc_id
Left Outer Join 2Testdb As ReverseRelationship On ReverseRelationship.Bus_id = @id And ReverseRelationship.Acc_id = 1Testdb.Acc_id
Where
ForwardRelationship.Acc_id Is Null And
ForwardRelationship.Bus_id Is Null And
ReverseRelationship.Acc_id Is Null And
ReverseRelationship.Bus_id Is Null And
1Testdb.Acc_id <> @id