Mysql 带子查询的左外连接 (wordpress)
Mysql Left OUTER JOIN with Subquery (wordpress)
我正在为 MYSQL 创建一个查询,该查询将从 4 table 秒创建一个 table。
SELECT xp.ID,
MAX((CASE WHEN (xum.meta_key = 'first_name') THEN xum.meta_value ELSE NULL END)) AS `first_name`,
MAX((CASE WHEN (xum.meta_key = 'last_name') THEN xum.meta_value ELSE NULL END)) AS `last_name`,
MAX((CASE WHEN (xum.meta_key = 'user_church') THEN xum.meta_value ELSE NULL END)) AS `church`,
MAX((CASE WHEN (xpm.meta_key = 'reg_user') THEN xpm.meta_value ELSE NULL END)) AS `user`,
MAX((CASE WHEN (xpm.meta_key = 'shirt_size') THEN xpm.meta_value ELSE NULL END)) AS `shirt_size`,
MAX((CASE WHEN (xpm.meta_key = 'reg_trip') THEN xpm.meta_value ELSE NULL END)) AS `trip_id`,
xp_2.post_title AS 'trip_name',
FROM xs_posts AS xp
LEFT OUTER JOIN xs_postmeta AS xpm ON xp.ID = xpm.post_id
LEFT OUTER JOIN xs_usermeta AS xum ON xum.user_id = (CASE WHEN (xpm.meta_key = 'reg_user') THEN xpm.meta_value ELSE NULL END )
LEFT OUTER JOIN xs_posts xp_2 ON xp_2.ID = (CASE WHEN (xpm.meta_key = 'reg_trip') THEN xpm.meta_value ELSE NULL END )
Where xp.post_type = 'trip_reg'
GROUP BY xp.ID
产生:
ID - first_name - last_name- church - user - shirt_size - trip_id - trip_name
3025 - firstname - lastname - 23 - 1 - Large - 2033 - NULL
这些 table 是基本的 wordpress table 来自。我使用 wp_posts table 2 次。
wp_usermeta
wp_posts
wp_postmeta
问题是我无法根据 trip_id 获取要填充的行程名称。 IE triop_id 是一个 post id,我正试图从中获取 post 标题。该自定义 post 类型是 post_mission_trip.
如果我在末尾添加一个 Where 子句
AND xp_2.ID IS NOT NULL
我得到这个作为输出:
ID - first_name - last_name- church - user - shirt_size - trip_id - trip_name
3025 - NULL - NULL - NULL - NULL - NULL - 2033 - Trip Name
只需将 xp_2.post_title
包裹在 MAX()
集合中。
MAX(xp_2.post_title) AS `trip_name`
^^^^ ^
问题是 GROUP BY
正在折叠行,而您从不确定的行中获取值。那是一个外连接,连接谓词在一个可以 return NULL(CASE 表达式)...
的表达式上是相等的
MAX()
聚合将过滤掉 NULL 值,并获得非 NULL 值。获得 NULL returned 的唯一方法是所有行都为 NULL。)
我正在为 MYSQL 创建一个查询,该查询将从 4 table 秒创建一个 table。
SELECT xp.ID,
MAX((CASE WHEN (xum.meta_key = 'first_name') THEN xum.meta_value ELSE NULL END)) AS `first_name`,
MAX((CASE WHEN (xum.meta_key = 'last_name') THEN xum.meta_value ELSE NULL END)) AS `last_name`,
MAX((CASE WHEN (xum.meta_key = 'user_church') THEN xum.meta_value ELSE NULL END)) AS `church`,
MAX((CASE WHEN (xpm.meta_key = 'reg_user') THEN xpm.meta_value ELSE NULL END)) AS `user`,
MAX((CASE WHEN (xpm.meta_key = 'shirt_size') THEN xpm.meta_value ELSE NULL END)) AS `shirt_size`,
MAX((CASE WHEN (xpm.meta_key = 'reg_trip') THEN xpm.meta_value ELSE NULL END)) AS `trip_id`,
xp_2.post_title AS 'trip_name',
FROM xs_posts AS xp
LEFT OUTER JOIN xs_postmeta AS xpm ON xp.ID = xpm.post_id
LEFT OUTER JOIN xs_usermeta AS xum ON xum.user_id = (CASE WHEN (xpm.meta_key = 'reg_user') THEN xpm.meta_value ELSE NULL END )
LEFT OUTER JOIN xs_posts xp_2 ON xp_2.ID = (CASE WHEN (xpm.meta_key = 'reg_trip') THEN xpm.meta_value ELSE NULL END )
Where xp.post_type = 'trip_reg'
GROUP BY xp.ID
产生:
ID - first_name - last_name- church - user - shirt_size - trip_id - trip_name
3025 - firstname - lastname - 23 - 1 - Large - 2033 - NULL
这些 table 是基本的 wordpress table 来自。我使用 wp_posts table 2 次。
wp_usermeta wp_posts wp_postmeta
问题是我无法根据 trip_id 获取要填充的行程名称。 IE triop_id 是一个 post id,我正试图从中获取 post 标题。该自定义 post 类型是 post_mission_trip.
如果我在末尾添加一个 Where 子句
AND xp_2.ID IS NOT NULL
我得到这个作为输出:
ID - first_name - last_name- church - user - shirt_size - trip_id - trip_name
3025 - NULL - NULL - NULL - NULL - NULL - 2033 - Trip Name
只需将 xp_2.post_title
包裹在 MAX()
集合中。
MAX(xp_2.post_title) AS `trip_name`
^^^^ ^
问题是 GROUP BY
正在折叠行,而您从不确定的行中获取值。那是一个外连接,连接谓词在一个可以 return NULL(CASE 表达式)...
MAX()
聚合将过滤掉 NULL 值,并获得非 NULL 值。获得 NULL returned 的唯一方法是所有行都为 NULL。)