首页 > 解决方案 > 需要一些关于 SQL 代码的指导;子查询行错误

问题描述

*********下面的工作查询*********

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 - 子查询返回多于 1 行

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

当在网站上提交表单时,它们中的每一个都有一个值。所有提交都与“SubmissionId”相关联。这意味着,如果我有 500 份表单提交,它不会将“SubmissionID”150 中的“Status1”值替换为“SubmissionId”120 中的“bayanno1”值。

例如:

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

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

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

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

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

标签: sqljoomlaphpmyadmin

解决方案


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

简单来说,您希望FieldValue从包含28asFormIdbanyanno1as 的行中提取列值FieldName。此外,您希望过滤这些结果以仅显示任何以开头的列中的值SubmissionIds(假设您只有这 10 种可能性)。PendingStatus

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'

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

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

如果你不相信我,听听草莓

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


推荐阅读