10

哇,很难找到这个话题的简单解释。简单的多对多关系。

三个表,tableA、tableB 和一个联结 tableA_B。

我知道如何用键和所有东西建立关系,但是当执行 INSERT、UPDATE 和 DELETE 查询时我有点困惑......

基本上,我正在寻找的是一个示例,它显示:

  1. 如何根据TableB中的ID获取TableA中的所有记录

  2. 如何根据TableA中的ID获取TableB中的所有记录

3 如何在 TableA 或 TableB 中插入,然后在联结表中进行适当的插入以建立连接..

我不是在寻找特定项目的解决方案,只是一些可以应用的一般示例。也许你周围有东西?

4

4 回答 4

6

我要做的第一件事是推荐使用像Linq-To-SqlNHibernate这样的 ORM ,这将为您提供数据模型的对象表示,从而使处理多对多 CRUD 操作等复杂事情变得更加简单。

如果 ORM 不是您的工具集的一部分,那么这就是它在 SOL 中的外观。

用户 UserAddresses 地址
======= =======================
身份证 身份证 身份证
名字 UserId 城市
姓氏 地址 ID 状态
                              压缩

我们的表是这样连接的:

   用户.Id -> UserAddresses.UserId
   Addresses.Id -> UserAddresses.AddressId
  • 基于 Addresses.Id 的用户中的所有记录
选择用户。*
FROM 地址 INNER JOIN
                         UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN
                         用户在 UserAddresses.UserId = Users.Id
哪里(地址.Id = @AddressId)
  • 基于 Users.Id 的 Addresses 中的所有记录
选择地址。*
FROM 地址 INNER JOIN
                         UserAddresses ON Addresses.Id = UserAddresses.AddressId INNER JOIN
                         用户在 UserAddresses.UserId = Users.Id
WHERE (Users.Id = @UserId)
于 2009-01-06T14:12:56.817 回答
1
SELECT *
FROM a
WHERE id IN (SELECT aid FROM ab WHERE bid = 1234)

或者

SELECT a.*
FROM a
JOIN ab ON a.id = ab.aid
WHERE ab.aid = 12345

要插入,这取决于您的数据库(例如,主键是来自序列、自动生成还是以其他方式生成,或者只是复合键)。但你只需要:

对于该数据:

INSERT INTO a VALUES (...)

对于关系:

INSERT INTO ab VALUES (...)
于 2009-01-06T14:00:39.400 回答
1

要根据 B 中的键获取表 A 中的所有记录,用英语表示,您希望表 A 中的记录具有与该表 B 键的连接记录(假设表 A_B 有两个外键列,(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)

要插入新记录,请根据需要在 TableA 和 TableB 中进行正常插入...插入连接表 (tableA_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)  
于 2009-01-06T15:05:00.923 回答
0

1) select tableA.* from tableA join tableA_B on tableA.id = tableA_B.idA where tableA_B.idB = somevalue

2) select tableB.* from tableB left join tableA_B on tableB.id = tableA_B.idB where tableA_B.idA = somevalue

3)insert取决于你的数据库,但是insert into a,insert into b,再insert into a_b;即使对表格有限制,它也应该以这种方式工作。

提示:不要将 IN 运算符用于 1/2

于 2009-01-06T14:02:10.567 回答