2

SQL (MySQL) で何かをしようとしていますが、それが可能かどうかはわかりません。シナリオはユーザー調査を行うことです。私はカーテン期間後に質問が再質問される調査を作成しようとしています。今日の私の SQL は次のようになります (他の方法がわからないため、内側の select ステートメントで質問 ID をハードコーディングする必要がありました)。

SELECT surveyquestions.priority, surveyquestions.id, surveyquestions.question,       surveyquestions.html FROM surveyquestions
    LEFT JOIN surveyanswers ON surveyquestions.id = surveyanswers.id AND surveyanswers.uuid = 22946252362612764
    WHERE (surveyanswers.id IS null OR 
    (SELECT datestamp FROM surveyanswers WHERE id = 22 ORDER BY datestamp DESC LIMIT 1) < 
    DATE_SUB(NOW(),INTERVAL 1 HOUR))
    AND surveyquestions.priority != 999 
    AND surveyquestions.brid = 'testprod2'
    ORDER BY surveyquestions.priority LIMIT 1;

私がやりたいことは、どういうわけか、外側のSELECTでsurveyquestion.idを内側のselect whereステートメントの一部として使用することです(WHERE id = 22はハードコードされたビットです)。

編集: ステートメントの詳細情報/背景
- 優先度は質問が表示される順序です
- 優先度 999 は質問を表示しないことを意味します
- Brid は質問が関連するブランド/製品です
- uuid はその一意の識別子です質問に回答しているユーザー

4

1 に答える 1

4

テーブル名が同じ場合にこれを行うには、テーブルにエイリアスを与える必要があります。

SELECT surveyquestions.priority, surveyquestions.id, surveyquestions.question,       surveyquestions.html FROM surveyquestions
    LEFT JOIN surveyanswers oa ON surveyquestions.id = oa.id AND oa.uuid = 22946252362612764
    WHERE (surveyanswers.id IS null OR 
    (SELECT datestamp FROM surveyanswers ia WHERE ia.id = oa.id ORDER BY datestamp DESC LIMIT 1) < 
    DATE_SUB(NOW(),INTERVAL 1 HOUR))
    AND surveyquestions.priority != 999 
    AND surveyquestions.brid = 'testprod2'
    ORDER BY surveyquestions.priority LIMIT 1;

以前oaは「外側の答え」とia「内側の答え」を表していました。

于 2013-06-26T11:00:58.460 に答える