需要有关SQL代码的一些指导;子查询行错误

时间:2018-11-22 08:02:22

标签: sql joomla phpmyadmin

********* 以下工作查询 *********

SELECT  a.SubmissionId, a.FieldName, a.FieldValue
 FROM    jos_rsform_submission_values a
         INNER JOIN
         (SELECT SubmissionId, FieldName
         FROM jos_rsform_submission_values b
               WHERE FieldName IN ('Status1', 'Status2', 'Status3', 'Status4', 'Status5', 'Status6', 'Status7', 'Status8', 'Status9', 'Status10')
                AND FieldValue = 'Pending'
                 AND FormId = 28
          ) AS test

         ON a.SubmissionId = test.SubmissionId
WHERE  a.FieldName = 'bayanno1' AND a.FormId = 28

************* END *************

我编写了以下SQL查询:

SELECT SubmissionId,
   (SELECT FieldValue
      FROM jos_rsform_submission_values
     WHERE FieldName IN (SELECT FieldName
                           FROM jos_rsform_submission_values
                          WHERE FieldName = 'bayanno1')) AS FieldValue
  FROM jos_rsform_submission_values
 WHERE FieldName IN (SELECT FieldName
                       FROM jos_rsform_submission_values
                      WHERE FieldName = 'Status1')
   AND FieldValue = 'Pending'
   AND FormId = 28

我只是想知道是否有人可以帮助我找到为什么会给我以下错误的问题:

  

#1242-子查询返回多于1行

我在同一列中有两个字段。一个是“ bayanno1”,另一个是“ Status1”。

在网站上提交表单时,每个都有价值。所有提交均与“ SubmissionId”链接。这意味着,如果我有500个表单的提交,它将不会用“ SubmissionId” 120中的“ bayanno1”值替换“ SubmissionID” 150中的“ Status1”值。

例如:

(FieldName) "bayanno1"  = "12345" (FieldValue) ; 300 (SubmissionId) ;

(FieldName) "Status1" = "Pending" (FieldValue) ; 300 (SubmissionId) ;

我需要将“ Status1”的值替换为“ bayanno1”的值; ,但仅用于查询目的。我不想替换实际值,仅作为视觉查询

因此具有正确SQL的表应如下所示(我将在我的网页上编写一个PHP查询,以从数据库中提取信息并插入到表中,但是该表只是一个非常基本的示例):

<table>
<tr>
<th>bayanno1</th>
<th>Status1</th>
</tr>
<tr>
<td>12345</td>
<td>12345</td>
</tr>
</table>

1 个答案:

答案 0 :(得分:1)

已编辑-在更改问题的逻辑要求之后...

最简单地说,您要从包含FieldValue作为28FormId作为banyanno1的行中提取FieldName列值。此外,您希望过滤这些结果,以在以SubmissionIds开头的任何列中仅显示具有Pending作为值的Status(假设您只有这10种可能性)。 / p>

SELECT a.SubmissionId, a.FieldValue
FROM jos_rsform_submission_values a
INNER JOIN
    (SELECT SubmissionId
     FROM jos_rsform_submission_values
     WHERE FieldName LIKE 'Status%'
       AND FieldValue = 'Pending'
       AND FormId = 28
    ) b
ON a.SubmissionId = b.SubmissionId
WHERE a.FormId = 28
  AND a.FieldName = 'bayanno1'

如果要查看联接生成的所有列,可以在SELECT子句中使用a.*, b.*

正如我之前多次告诉您的那样,当您在此处或JoomlaStackExchange上寻求MySQL支持时,请为您的问题提供足够数量的表结构和数据,以使志愿者无需rs_forms_submission_values表的本地副本可以更轻松地提供帮助。更重要的是,志愿者不会知道您的数据中有10个不同的Status行,因此他们注定不仅会失败,而且会浪费时间来帮助您。

如果您不相信我,请listen to Strawberry

最后,我想您会在JoomlaStackExchange上获得更快的支持,因为那里的许多志愿者可能拥有自己的表本地副本,并且可以在自己的系统上直接编写和测试解决方案。这是一个与Joomla相关的问题,因此在JSE上肯定会受到欢迎。

相关问题