繁体   English   中英

MySQL:根据一行的值获取多行

[英]MySQL: Getting multiple rows based on the value of one row

我的MySQL表如下所示:

在此处输入图片说明

我想获得满足以下所有条件的结果:

  • form_id为1
  • lead_id排序
  • lead_id field_number 9必须为111

总之,我的查询应该返回9行。 那可能吗?

到目前为止,这是我的尝试,但我真的想尽可能避免使用GROUP_CONCAT以获得更清晰的结果集。

SELECT lead_id, GROUP_CONCAT(field_number, "|", value SEPARATOR "----") AS `values`
FROM lead_detail
WHERE form_id = 1
GROUP BY lead_id
ORDER BY lead_id DESC

如果您的意思是您只想包含 Lead_id的行(如果存在该lead_id的行, lead_id该行具有field_number=9value=111 否则,该lead_id所有行均应排除在外...

您可以执行以下操作:

SELECT d.id
     , d.lead_id
     , d.form_id
     , d.field_number
     , d.value
  FROM ( SELECT e.lead_id
           FROM lead_detail e
          WHERE e.form_id      = 1
            AND e.field_number = 9
            AND e.value        = 111
          GROUP BY e.lead_id
       ) f
  JOIN lead_detail d
    ON d.lead_id = f.lead_id
   AND d.form_id = 1
 ORDER BY d.lead_id DESC

内联视图(别名为f )返回满足特定条件的lead_id的不同列表。 我们可以像引用表一样引用该结果,并在JOIN操作中使用该结果以从lead_detail表返回“匹配”的行。 (如果没有针对特定lead_id value=111field_number=9form_id=1lead_id ,则内联视图将不会在列表中返回该lead_id 。)


作为另一种选择,我们可以将EXISTS谓词与相关子查询一起使用,但这可能效果不佳:

SELECT d.id
     , d.lead_id
     , d.form_id
     , d.field_number
     , d.value
  FROM lead_detail d
 WHERE d.form_id = 1
   AND EXISTS
       ( SELECT 1
           FROM lead_detail e
          WHERE e.form_id      = 1
            AND e.field_number = 9
            AND e.value        = 111
            AND e.lead_id      = d.lead_id
       )
 ORDER BY d.lead_id DESC

lead_detail ,对于lead_detail每一行, lead_detail在EXIST关键字lead_detail运行子查询...如果子查询返回一(或多)行,则EXISTS谓词返回TRUE,否则返回FALSE。 即子查询“相关联”以外部查询,通过在WHERE子句中的谓词,匹配lead_id到的值lead_id从外部查询的行。

简短的回答是“不容易”。 有几种方法并非一帆风顺-可能最简单的方法是使用子查询(确切的格式将根据表的确切格式等而改变)。

SELECT lead_id, GROUP_CONCAT(field_number, "|", value SEPARATOR "----") AS `values`
FROM lead_detail
WHERE `form_id` = 1
AND `lead_id` = (SELECT `lead_id` FROM `lead_detail` WHERE `field_number` = 9 AND `value` = 111 AND `form_id` = 1) /*This is the subquery*/
GROUP BY lead_id
ORDER BY lead_id DESC

其他选项包括运行两个单独的查询,一个查询提取有问题的form_id (或form_ids ),另一个查询提取该form_id (或那些form_ids )的所有数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM