簡體   English   中英

在 sql 查詢中處理多對多關系

[英]Handling many-to-many relationship in a sql query

因此,正如您在數據建模中所知道的,多對多關系是通過創建橋接表來處理的。 這將使我們能夠擁有外鍵約束。

我的問題與從具有多對多關系的表中查詢數據有關。

我舉個例子。 假設我們有以下表格

表格1

Column 1
Column 2
Column 3

表 2

Column 1
Column 4
Column 5

表3(橋表)

Column 1

好的,所以當我嘗試從表 1 中查詢數據並左連接表 2 時,我得到的結果與左連接表 3 和左連接表 2 的表中的查詢數據相同。這讓我想知道橋表是否是包含在 SQL 查詢中的必要步驟!

先感謝您:)

您的橋接表只有一列,這表明您混淆了一對多關系(或許多一對一)和多對多關系。

在一對多關系中,子表直接引用父表,不需要橋表:

create table orders (
    order_id int primary key,
    order_date date,
    ...
);

create table order_items (
    order_item_id int primary key,
    order_id int references orders(order_id),
    ...
)

在多對多關系中,橋表有(至少)兩列,一列用於在關系中起作用的每個引用表:

create table authors (
    author_id int primary key,
    name varchar(50),
    ...
);

create table books (
    book_id int primary key,
    title varchar(50),
    ...
);

create table book_authors (
    author_id int references authors(author_id),
    book_id int references books(book_id),
    primary key (author_id, book_id)
)

讓我們讓你的例子不那么抽象。 有不喜歡和喜歡的帖子。 表 1 = 喜歡,表 2 = 不喜歡。

  • 表喜歡(post_id,誰,為什么)
  • 表不喜歡(post_id、誰、為什么)

然后是橋接表

  • 表帖子(post_id,內容)

這是一個示例,其中兩個子表由父表關聯。 創建橋接表不是為了在兩個子表之間獲得 m:n 關系,而是因為子表沒有父表就沒有意義。 子表是 m:n 相關的,但我們通常不將其稱為 m:n 關系,因為這些表只是失去關聯(喜歡屬於帖子,不喜歡屬於帖子,但喜歡不屬於) t真的屬於不喜歡)。

在談論 m:n 關系時,我們通常不是在談論父/子關系。

一個例子:一個訂單可以包含很多產品,一個產品可以在很多訂單中。

  • 表訂單(order_id,日期)
  • 表產品(product_id、名稱、價格)

橋接表為 position 順序:

  • 表 order_detail (order_id, product_id, amount)

訂單和產品之間沒有父/子關系,但兩者是相關的,因為產品是訂購的。 這就是我們通常所說的 m:n 關系。 橋表建立訂單和產品之間的關系。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM