簡體   English   中英

3張表之間的SQL查詢關系

[英]SQL Query relationship between 3 tables

我有一個場景,其中有以下表格:

Inventories delivery_items deliveries

我尋求一個查詢,在哪里獲得庫存id ,我得到delivery_item (fk_inventory),然后我從 (fk_delivery) 獲得delivery

手動,我轉到delivery_items表,然后從我正在尋找的庫存中搜索與id匹配的fk_inventory ,然后我得到fk_delivery ,並得到delivery 但我需要對 15k+ 項進行報告。

根據我上面提到的關系,如何編寫一個查詢,我可以從庫存ids列表中的哪個位置到達delivery

有很多關於編寫 SQL 查詢的網站,區分普通(內部)聯接與外部聯接、左聯接、右聯接、子查詢等。您想要做的可能是最好的(由於所有庫存項目有問題)是簡單的連接。

試着這樣想,也許這樣做。 准備一張紙,一張代表每張桌子,並在上面寫下列。

現在,直觀地查看可用表,根據它們的相關性將它們放在一起。 注意表 A 中的列,它是下一個表的外鍵。 再說一次,從第二個到第三個。

一旦你完成了這件事(或者即使只是在精神上),你就可以看到它們是如何相關的。 這是 FROM 子句的基礎

select *
   from
      YourFirstTable yft
         JOIN YourSecondTable yst
            on yft.WhateverKey = yst.MatchingKeyColumn
            JOIN YourThirdTable ytt
               on yst.KeyToThirdTable = ytt.KeyInThisTable

現在您已經建立了所有關系,您始終可以從這些相應的表中聲明您想要的各個列。 更容易使用別名,例如我在此處通過yftystytt的代表第一、第二和第三個表的別名。 使用適合您的表的別名,例如 i=inventories、di = delivery_items、d = Deliveries。

然后添加您想要的任何過濾條件。 如果條件基於 FIRST 表,例如上面的 yft,則將進入 WHERE 子句,例如

其中 yft.SomeColumn = 'blah'

如果過濾條件特定於您的第二個或第三個表,只需將其添加到 JOIN / ON 條件中,以便它與表保持一致,並且您可以根據上下文知道它與 HERE 相關聯。 當您進入 LEFT JOIN 時,它會更容易。

   from
      YourFirstTable yft
         JOIN YourSecondTable yst
            on yft.WhateverKey = yst.MatchingKeyColumn
            AND yst.SecondTableColumn = 'someOtherValue'
            AND yst.SomeOtherColumn = 'somethingElse'

因此,現在,引擎可以遍歷所有庫存項目、相應的詳細信息、實際交付,而不必每次都進行單獨的搜索,這對於跟蹤/運行/和性能來說是很痛苦的。

暫無
暫無

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

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