嵌套 SQL 语句但在内部语句中重用 out 变量?

Posted

技术标签:

【中文标题】嵌套 SQL 语句但在内部语句中重用 out 变量?【英文标题】:nested SQL statements but reusing out variable in the inner statement? 【发布时间】:2013-06-23 11:24:57 【问题描述】:

我正在尝试在 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 是回答问题的用户的唯一标识符

【问题讨论】:

【参考方案1】:

为了在表名相同的情况下执行此操作,您需要为表赋予 别名

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 表示“内部答案”。

【讨论】:

以上是关于嵌套 SQL 语句但在内部语句中重用 out 变量?的主要内容,如果未能解决你的问题,请参考以下文章

带有准备好的语句的 Java JOOQ

如何在 Oracle SQL 语句中重用动态列?

为啥嵌套的 using 块会多次处理对象? [复制]

sql语句字符串的嵌套问题

有两个循环,他们是嵌套关系,在内循环中使用break将终止哪一个循环?

如何优化这段if else多层嵌套?