SQL JOIN两个具有一对多关联数组的表?

时间:2012-04-04 21:48:18

标签: sql join union one-to-many

我是相对较新的SQL查询,我正在尝试连接两个表以获得一个不错的数据集,但一直有一些问题。我试过两个:

SELECT wp_rg_lead.id, wp_rg_lead.created_by, wp_rg_lead_detail.field_number, wp_rg_lead_detail.value
FROM wp_rg_lead, wp_rg_lead_detail
WHERE wp_rg_lead.id = wp_rg_lead_detail.lead_id AND wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved'

SELECT wp_rg_lead.id, wp_rg_lead.created_by, wp_rg_lead_detail.field_number, wp_rg_lead_detail.value
FROM wp_rg_lead
INNER JOIN wp_rg_lead_detail
ON wp_rg_lead.id = wp_rg_lead_detail.lead_id
WHERE wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved'

两者都没有起作用,两者都说明了我无法做出好的SQL语句:)

基本上,其中一个表wp_rg_lead包含一个表单ID wp_rg_lead.id,它通过wp_rg_lead_detail与第二个表wp_rg_lead_detail.lead_id相关。

我基本上希望获得wp_rg_lead.created_by并将其与众多wp_rg_lead_detail.field_number及其关联的wp_rg_lead_detail.value相关联。这必须基于wp_rg_lead.form_id = '9'wp_rg_lead.payment_status = 'Approved'

基本上我想得到一个很好的数组,最终会看起来像:

Array
(
    [0] => stdClass Object
        (
            [id] => 301
            [created_by] => 213
            [field_number(1)] => [value(1)]
            [field_number(2)] => [value(2)]
            [field_number(3)] => [value(3)]
            ...
        )
     ...
)

但我不知道如何构建SQL语句以关联field_numbervalue。我是否需要构建两个不同的语句并将它们联合起来?

最后,我希望能够对数组执行count()并让它只返回基于“已批准”状态的条目数。我的第二个查询结果为208或其他。

我很感激任何试图让这个查询起作用的帮助。这超出了我现在所理解的范围。

非常感谢!

1 个答案:

答案 0 :(得分:0)

如果我理解你在说什么,那么你就是在使用交叉表查询结果。动态交叉表查询here

有一些很好的指示

如果您可以处理限制"字段编号"列到一个集合组然后像这样的查询可能有效:

SELECT
  [ID],
  [CREATED_BY],
  [FIELD_NUMBER1] = SUM(CASE WHEN [FIELD_NUMBER] = 'FIELD_NUMBER1' THEN [FIELD_VALUE] ELSE 0 END),
  [FIELD_NUMBER2] = SUM(CASE WHEN [FIELD_NUMBER] = 'FIELD_NUMBER2' THEN [FIELD_VALUE] ELSE 0 END)
....
FROM wp_rg_lead
INNER JOIN wp_rg_lead_detail
ON wp_rg_lead.id = wp_rg_lead_detail.lead_id
WHERE wp_rg_lead.form_id = '9' AND wp_rg_lead.payment_status = 'Approved'

(从你的例子中得到最后一点,根据需要进行修改)