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 ;
我有一个元数据 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 ;