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

Require some guidance on SQL code; subquery row error

********* 下面的工作查询[=​​38=] *********

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

***************结束***************

我写了以下 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 - Subquery returns more than 1 row

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

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

例如:

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

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

我需要用 "bayanno1" 的值替换 "Status1" 的值; 但仅供查询之用。我不想替换实际值,只是作为一个可视化查询.

所以 table 和正确的 SQL 应该是这样的(我会在我的网页上写一个 PHP 查询来从数据库中提取信息并插入到 table,然而这个 table 只是一个非常基本的例子):

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

已编辑——在您更改问题的逻辑要求后...

用最简单的话来说,您想从包含 28 作为 FormIdbanyanno1 作为 FieldName 的行中提取 FieldValue 列值].此外,您希望过滤这些结果以仅显示 SubmissionIds,其中 Pending 作为任何以 Status 开头的列中的值(假设您只有这 10 种可能性)。

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 支持时,请在你的问题中附上足够的 table 结构和数据,以便没有 rs_forms_submission_values table 本地副本的志愿者可以更轻松地提供帮助。更重要的是,志愿者将不知道您的数据中有 10 个不同的 Status 行,因此他们注定不仅会失败,而且会浪费他们的时间来帮助您。

如果你不相信我,listen to Strawberry

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