簡體   English   中英

MySQL:根據多行數據組合多個相關表

[英]MySQL: Combine multiple related tables based on data in multiple rows

[更新]

我有一個表定義的三個表 ,而這三個表之間的關系由另一個表定義,如下所示:

  1. 表#1: wp_pods_cities [城市PODS]

     item_id city -------- ---------- 1 Albany 2 Perth 3 Albany 4 Hollywood 5 Albany 6 San Diego 7 Denpasar 
  2. 表#2: wp_pods_regions [地區PODS]

     item_id region -------- ------------------ 1 Western Australia 2 California 3 Texas 4 Bali 
  3. 表#3: wp_pods_countries [國家PODS]

     item_id country -------- -------------- 1 Australia 2 United States 3 Indonesia 
  4. 表#4: wp_posts [帖子類型]

     pod_id pod_name post_type ------- ---------- ---------- pod_1 countries pods pod_2 regions pods pod_3 cities pods 
  5. 表#5: wp_podsrel [PODS關系]

     rel_id pod_id item_id related_pod_id related_item_id ------- ------- -------- --------------- ---------------- 1 pod_2 1 pod_1 1 2 pod_2 2 pod_1 2 3 pod_2 3 pod_1 2 4 pod_2 4 pod_1 3 5 pod_3 1 pod_2 1 6 pod_3 2 pod_2 1 7 pod_3 3 pod_2 2 8 pod_3 4 pod_2 2 9 pod_3 5 pod_2 3 10 pod_3 6 pod_2 3 11 pod_3 7 pod_2 4 

注意:上表是由PODS CMS插件Wordpress中創建的,但經過簡化后可以在此處讀取。 實際的表也有成千上萬的數據。

我想做什么

我想列出已定義的相同城市 (在本例中為Albany ),以及區域以及它們所屬的國家

  • 預期結果:

     city region country ------- ------------------ -------------- Albany Western Australia Australia Albany California United States Albany Texas United States 

我嘗試過的

SELECT ct.city, rg.region, ctr.country
FROM wp_pods_cities AS ct
INNER JOIN wp_podsrel AS rel ON ct.item_id = rel.item_id
AND rel.pod_id IN ('pod_3', 'pod_2')
INNER JOIN wp_pods_regions AS rg ON rel.related_item_id = rg.item_id
INNER JOIN wp_pods_countries AS ctr ON rel.related_item_id = ctr.item_id
WHERE ct.city = 'Albany'
ORDER BY ct.city

這將使我了解城市及其相關區域,但與國家無關。 我如何獲得上述樣本結果?

提前致謝。

我設法通過兩次使用podsrel表來獲得正確的輸出,一次用於城市,一次用於區域。

SELECT ct.city, rg.region, co.country

FROM wp_pods_cities AS ct, wp_podsrel AS pr

INNER JOIN wp_pods_regions AS rg
    ON rg.item_id = pr.related_item_id

INNER JOIN wp_podsrel AS pr2
    ON pr2.item_id = rg.item_id

INNER JOIN wp_pods_countries AS co
    ON co.item_id = pr2.related_item_id

WHERE ct.city = 'Albany'
    AND pr.item_id = ct.item_id

ORDER BY ct.city

感謝@sjdaws的輸入,我設法為我更新的問題修改了他的解決方案

SELECT ct.city, rg.region, co.country
    FROM wp_pods_cities AS ct, wp_podsrel AS pr
        INNER JOIN wp_pods_regions AS rg
            ON rg.item_id = pr.related_item_id
        INNER JOIN wp_podsrel AS pr2
            ON pr2.item_id = rg.item_id
        INNER JOIN wp_pods_countries AS co
            ON co.item_id = pr2.related_item_id
    WHERE ct.city = 'Albany'
        AND pr.item_id = ct.item_id
        AND pr.pod_id = 'pod_3'
        AND pr2.item_id = rg.item_id
        AND pr2.pod_id = 'pod_2'
    ORDER BY co.country, rg.region

在此處查看結果: http : //www.sqlfiddle.com/#!2/d40c0/10

暫無
暫無

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

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