1

[更新しました]

1つのテーブルで定義された3つのテーブルがあり、これら3つのテーブル間の関係は、次のような別のテーブルで定義されています。

  1. 表1:wp_pods_cities [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
    

注:上記の表は、WordpressPODS CMSプラグインによって作成されていますが、ここで読みやすくするために簡略化されています。実際のテーブルにも数千のデータがあります。

やりたいこと

定義されているのと同じ都市(この場合は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

これにより、都市とその関連地域がわかりますが、は関連していません。上記のサンプル結果を達成するにはどうすればよいですか?

よろしくお願いします。

4

2 に答える 2

1

podsrelテーブルを2回使用して、正しい出力を取得することができました。1回は都市用、もう1回は地域用です。

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
于 2013-02-23T13:16:16.200 に答える
0

@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

于 2013-02-24T03:26:06.887 に答える