[增订]
我有一个表定义的三个表,这三个表之间的关系由另一个表定义,如下所示:
表#1: wp_pods_cities [城市PODS]
item_id city
-------- ----------
1 Albany
2 Perth
3 Albany
4 Hollywood
5 Albany
6 San Diego
7 Denpasar
表#2: wp_pods_regions [Regions PODS]
item_id region
-------- ------------------
1 Western Australia
2 California
3 Texas
4 Bali
表#3: wp_pods_countries [国家/地区PODS]
item_id country
-------- --------------
1 Australia
2 United States
3 Indonesia
表#4: wp_posts [帖子类型]
pod_id pod_name post_type
------- ---------- ----------
pod_1 countries pods
pod_2 regions pods
pod_3 cities pods
表#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 plugin在 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
这将为我提供城市及其相关的区域,但国家/地区不相关。我如何实现上面的样本结果?
先谢谢。
答案 0 :(得分:1)
我设法通过两次使用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
答案 1 :(得分: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