2016-04-10 1 views
0
SET @v1 := (SELECT questor.questioncart.idQuestionCart FROM questioncart WHERE User_username = "eamin" ORDER BY idQuestionCart DESC LIMIT 1); 
SET @v2 := (SELECT questor.questioncart_has_question.Question_idQuestion FROM questioncart_has_question WHERE QuestionCart_idQuestionCart = @v1); 
SELECT questor.question.questionText FROM question WHERE idQuestion = @v2; 

このMySQLクエリでは、「サブクエリが1行以上を返します」というエラーが発生しています。 MySQLは2番目のクエリ(@ v2)をエラーの作成としています。この問題を解決するために私は何ができますか?あなたは問題を解決する私の与えられたクエリのための最適化されたmysqlを私に提供できますか?MySQLエラー:サブクエリは1行以上を返します。このクエリを最適化するにはどうすればよいですか?

+2

何をしようとしているか説明してください。サンプルデータと望ましい結果は、機能していないクエリよりもはるかに役立ちます。 –

+0

あなたは単純にLIMIT 1を追加することができますが、これはあなたが望むWHERE基準に一致する複数のレコードのうちの実際のレコードから値を選択するかどうかは疑わしいです... – CBroe

答えて

0

あなたはどちらかのクエリでLIMIT 1を使用する必要があります。

SET @v2 := (SELECT questor.questioncart_has_question.Question_idQuestion 
      FROM questioncart_has_question 
      WHERE QuestionCart_idQuestionCart = @v1 
      LIMIT 1); 

または、このような最後のクエリを変換:

SELECT questor.question.questionText 
FROM question 
WHERE idQuestion IN (SELECT questor.questioncart_has_question.Question_idQuestion 
      FROM questioncart_has_question 
      WHERE QuestionCart_idQuestionCart = @v1) 

それはあなたのビジネスルールと実際の要件に依存します。

0

クエリとしてクエリを実行する必要があります。 MySQLに最適化をさせてください。少なくとも、複数のクエリに対してデータベースに戻る時間を節約できます。

SELECT q.questionText 
FROM question q 
WHERE idQuestion IN (SELECT qchq.Question_idQuestion 
        FROM questioncart_has_question qchq JOIN 
          (SELECT qc.idQuestionCart 
          FROM questioncart qc 
          WHERE User_username = 'eamin' 
          ORDER BY idQuestionCart DESC 
          LIMIT 1 
         ) qc 
          ON qchq.QuestionCart_idQuestionCart = qc.idQuestionCart 
        ); 
関連する問題