Sql server 2005 多对多关系中的查询示例
哇,很难找到这个话题的简单解释。简单的多对多关系 三张表,表a、表B和连接表a\U B 我知道如何用键和所有键建立关系,但当执行插入、更新和删除查询时,我有点困惑 基本上,我要找的是一个例子,说明: 如何根据TableB中的ID获取TableA中的所有记录 如何根据TableA中的ID获取TableB中的所有记录 3如何在表A或表B中插入,然后在连接表中进行适当的插入以建立连接 我不是在寻找一个特定项目的解决方案,只是一些可以应用的通用示例。也许你周围有什么东西Sql server 2005 多对多关系中的查询示例,sql-server-2005,many-to-many,Sql Server 2005,Many To Many,哇,很难找到这个话题的简单解释。简单的多对多关系 三张表,表a、表B和连接表a\U B 我知道如何用键和所有键建立关系,但当执行插入、更新和删除查询时,我有点困惑 基本上,我要找的是一个例子,说明: 如何根据TableB中的ID获取TableA中的所有记录 如何根据TableA中的ID获取TableB中的所有记录 3如何在表A或表B中插入,然后在连接表中进行适当的插入以建立连接 我不是在寻找一个特定项目的解决方案,只是一些可以应用的通用示例。也许你周围有什么东西 SELECT * FROM a
SELECT *
FROM a
WHERE id IN (SELECT aid FROM ab WHERE bid = 1234)
或
要插入,这取决于您的数据库,例如主键是来自序列、自动生成还是以其他方式生成,或者只是复合键。但你只需要:
对于这些数据:
INSERT INTO a VALUES (...)
对于关系:
INSERT INTO ab VALUES (...)
一,
选择tableA.*从tableA中加入tableA.id=tableA\u B.idA上的tableA\u B
其中,tableA_B.idB=somevalue
二,
选择tableB.*从tableB左侧连接tableB.id=tableA_B.idB上的tableA_B
其中tableA_B.idA=somevalue
3 insert取决于您的数据库,但是insert到a,insert到b,然后insert到a_b;即使在表上有约束,它也应该以这种方式工作
提示:不要在运算符中使用1/2我要做的第一件事是建议使用ORM-like or,它将为您的数据模型提供对象表示,这使得处理复杂的事情(如多对多CRUD操作)变得更加简单 如果ORM不是您的工具集的一部分,那么在SOL中会是这样的 Users UserAddresses Addresses ======= ============= ========= Id Id Id FirstName UserId City LastName AddressId State Zip 我们的表是这样连接的: Users.Id -> UserAddresses.UserId Addresses.Id -> UserAddresses.AddressId 基于Addresses.Id的用户中的所有记录 基于Users.Id的地址中的所有记录
要根据B中的键获取表A中的所有记录(英语),您需要表A中具有该表B键的联接记录的记录 假设tableA_B有两个外键col,TabAFK和TabBFK
Select * from TableA A
Where pK In (Select Distinct TabAFK From tableA_B
Where TabBFK = @TableBKeyValue)
另一个方向也是一样
Select * from TableB B
Where pK In (Select Distinct TabBFK From tableA_B
Where TabAFK = @TableAKeyValue)
若要插入新记录,请根据需要在表a和表B中正常插入。。。连接表table a_B中的插入只是来自两个主表的两个pk
Insert TableA (pk, [other columns]) Values(@pkValue, [other data)
Insert TableB (pk, [other columns]) Values(@pkValue, [other data)
-然后为存在的每个关联插入联接表
Insert tableA_B (TabAFK, TabBFK) Values(@PkFromA, @PkFromB)
好的,那么有无连接都可以做到这一点?在连接的第二个示例中,是否有必要写入SELECT a.*SELECT where In通常比SELECT where exists SELECT*from a where exists SELECT*from b where a.Id=b.aId和b.Id=1234这解决了我的选择问题,但我在更新连接表方面有点困难。最聪明的方法是什么?我必须将WHERE子句同时设置为现有的Userid和Addressid,对吗?我试过使用临时表,但语法似乎不正确。是的。您需要将wehere子句设置为现有Userid和Addressid@Micah如果我像这样编写第一个查询:选择Users.*FROM Users internal JOIN UserAddresses ON Users.Id=UserAddresses.UsersID UserAddresses.AddressId=Addresses.IdWHERE Addresses.Id=@AddressId可以吗?返回什么?
Select * from TableB B
Where pK In (Select Distinct TabBFK From tableA_B
Where TabAFK = @TableAKeyValue)
Insert TableA (pk, [other columns]) Values(@pkValue, [other data)
Insert TableB (pk, [other columns]) Values(@pkValue, [other data)
Insert tableA_B (TabAFK, TabBFK) Values(@PkFromA, @PkFromB)