SQL 根据第一个值从同一个 table 中获取不同的值两次

SQL get distinct values from same table twice based on first value

我有一个元数据 table,带有 meta_key 和 meta_value,元键包括 country_iso 和国家/地区。 iso 值始终存在,但 country 值不存在。下面的代码获取所有唯一的 iso 值,但我也想获取匹配的国家/地区名称。

SELECT DISTINCT pm.meta_value 
FROM postmeta pm 
    LEFT JOIN posts p ON p.ID = pm.post_id 
WHERE pm.meta_key = 'country_iso' 
AND pm.meta_value > '' 
AND p.post_type = 'locations' 
AND p.post_status 
NOT IN ( 'trash', 'auto-draft' ) 
ORDER BY pm.meta_value ASC;

我尝试将 IN 与 country_iso 和国家/地区结合使用,但这显示它们都在同一行中,这也不是我要找的。最后,我想在两行中获得具有唯一国家 iso 和国家名称的结果。

我确定它可以是一对一查询,但到目前为止这让我很头疼。谁能给我指出正确的方向?

您应该使用 post 作为主要 table 并加入 postmete,对于 iso 使用内部连接,对于国家/地区使用左连接

    SELECT DISTINCT pm1.meta_value, pm2.meta_value
    FROM  posts p
    INNER JOIN postmeta pm1 ON p.ID = pm1.post_id  ON pm1.meta_key = 'country_iso' AND pm1.meta_value > '' 
    LEFT JOIN postmeta pm2 ON p.ID = pm2.post_id AND pm2.meta_key = 'country' 
    WHERE p.post_type = 'locations' 
    AND p.post_status NOT IN ( 'trash', 'auto-draft' ) 
    ORDER BY pm1.meta_value, pm2.meta_value ;