MySQL错误消息:子查询返回超过1行

时间:2014-03-08 23:26:43

标签: mysql sql

请你帮我解决这个问题:

SELECT
  (SELECT AES_DECRYPT(cryptoword, SHA2('DatabaseEncryption1', 512)) FROM file_tree) AS cryptoword1,
  (SELECT AES_DECRYPT(name, SHA2(cryptoword1, 512)) FROM file_tree) AS name;

正如主题所说,我收到的错误是我的子查询返回超过1行。我希望实现的目标是:

  1. 获取特定数据库记录的密码。
  2. 使用该密码来解密记录的其余部分。
  3. 对满足WHERE条件的所有表记录/多条记录重复此过程,我稍后可以添加
  4. 如果我仅对一条记录使用查询,则我的查询有效。但是,我需要从表中获取多个记录。每条记录都有自己的密码,每行都有不同的密码。因此,我的任务是获取特定记录的密码,并使用该密码解密记录的其余部分。我需要为所有表记录重复此过程。

    由于性能原因,所有这些都需要在一个查询中进行格式化。

    提前谢谢。

2 个答案:

答案 0 :(得分:2)

在子查询中计算cryptoword1的值,然后您可以重复使用结果来计算外部查询中name的值。

SELECT
  cryptoword1,
  AES_DECRYPT(name, SHA2(cryptoword1, 512))   AS name
FROM
(
  SELECT
    AES_DECRYPT(cryptoword, SHA2('DatabaseEncryption1', 512)) AS cryptoword1,
    name
  FROM
    file_tree
)
  AS sub_query

答案 1 :(得分:0)

select语句中的子查询必须求值为单个值,否则您将收到此错误。这是有道理的,因为您希望填充一个字段的值。