【问题标题】:MySQL multiple selects on second tableMySQL 多选第二张表
【发布时间】:2016-08-24 14:50:02
【问题描述】:

我正在尝试构建一个选择语句。表结构如下所示。我基本上希望选择左侧表上的三个字段以及右侧表的 meta_values,它们的 meta_key 为责任服务和责任官员。这些元值可能存在也可能不存在。

我的糟糕尝试看起来像这样。

SELECT 
 `wp_posts`.`ID`,
`wp_posts`.`post_content`,
`wp_posts`.`post_title`
FROM(
`wp_posts`
INNER JOIN `wp_postmeta` ON (`wp_posts`.`ID` = `wp_postmeta`.`post_id`),
(Select `wp_postmeta`.meta_value where`wp_postmeta`.meta_key='responsible_officer') as Responsible Officer),
(Select `wp_postmeta`.meta_value where `wp_postmeta`.meta_key='responsible_service') as Responsible Service ),

结果应该是这样的

【问题讨论】:

  • 编辑您的问题并显示您想要的结果。您的查询不是 100% 明确的。
  • 在ON子句中使用左外连接添加条件
  • 您的查询没有结束。它只是...
  • 我已经在图片中添加了我正在寻找的结果,我接受的答案并不完全正确。仍然需要帮助。
  • 你能解释一下你面临的问题是什么

标签: mysql sql join subquery


【解决方案1】:

这将为每个 wp_posts.ID 提供 1 行或更多行,具体取决于找到的 'responsible_officer' 和 'responsible_service' 的数量。如果没有找到 meta_key 和 meta_value 将是null

SELECT 
 `wp_posts`.`ID`,
`wp_posts`.`post_content`,
`wp_posts`.`post_title`,
 max(case `wp_postmeta`.meta_key
   when 'responsible_officer' then `wp_postmeta`.meta_value end) as responsible_officer,
 max(case `wp_postmeta`.meta_key
   when 'responsible_service' then `wp_postmeta`.meta_value end) as responsible_service
FROM
`wp_posts`
LEFT JOIN `wp_postmeta` ON `wp_posts`.`ID` = `wp_postmeta`.`post_id`
                        AND `wp_postmeta`.meta_key in ('responsible_officer', 'responsible_service')

   group by `wp_posts`.`ID`,
    `wp_posts`.`post_content`,
    `wp_posts`.`post_title`;

【讨论】:

  • 我更新了图片以显示我希望将 'responsible_officer' 和 'responsible_service' 选择为单独的实体,这有意义吗?
  • @killie 是的,带有 CASE 和 group by。所以每个 ID 只有零个或一个责任官员和零个或一个责任服务?
  • @killie ups,一个额外的逗号。已编辑
【解决方案2】:

也检查一下:

select postmeta.meta_value, posts.ID, posts.`post_content`,
posts.`post_title` from `wp_posts` posts join `wp_postmeta` postmeta on posts.ID = postmeta.post_id where postmeta.meta_key IN ('responsible_officer', 'responsible_service')

【讨论】:

    【解决方案3】:
    SELECT 
     `wp_posts`.`ID`,
    `wp_posts`.`post_content`,
    `wp_posts`.`post_title`
    FROM `wp_posts`
    JOIN `wp_postmeta` ON (`wp_posts`.`ID` = `wp_postmeta`.`post_id`)
    where `wp_postmeta`.meta_key in ('responsible_officer', 'responsible_service')
    

    【讨论】:

    • 请在您的代码中提供解释,以便 OP 可以从中学习。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    相关资源
    最近更新 更多