子查询不起作用

Posted

技术标签:

【中文标题】子查询不起作用【英文标题】:Sub-query doesn't work 【发布时间】:2013-09-04 06:34:52 【问题描述】:

这是我的架构:

表“问题”; +----------+--------------+------+-----+---------+ ----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +----------+--------------+------+-----+---------+ ----------------+ |编号 |整数(11) |否 |优先级 |空 |自动增量 | | id_quest |整数(11) |否 | |空 | | |问题 | varchar(255) |否 | |空 | | |尼维尔 |整数(11) |否 | |空 | | |提示 | varchar(255) |否 | |空 | | +----------+--------------+------+-----+---------+ ----------------+ 表“回复”; +----------+----------------+------+-----+--------- +----------------+ |领域 |类型 |空 |钥匙 |默认 |额外 | +----------+----------------+------+-----+--------- +----------------+ |编号 |整数(11) |否 |优先级 |空 |自动增量 | | id_quest |整数(11) |否 | |空 | | |回复 | varchar(255) |否 | |空 | | | r_valido |枚举('0','1') |否 | |空 | | +----------+----------------+------+-----+--------- +----------------+

我的查询是:

SELECT q.questao, r.resposta 
FROM questoes q, respostas r 
WHERE q.id_quest IN (19,20,21) 
    AND q.id_quest=r.id_quest 
    AND r.r_valido = ( SELECT resposta FROM respostas WHERE r_valido= 1 )

我需要的是表 Questoes 中的字段 questao 和表 respostas 中的字段 resposta 其中字段 r_valido = 1resposta字段有4个结果,只有一个有效,也就是说r_valido = 1字段在哪里。

【问题讨论】:

您能否提供一个示例数据集作为 SQL Fiddle,并获得预期结果? 那些是大桌子吗?也许你可以把这些表/列名翻译成英文,我听不懂西班牙语? 【参考方案1】:

我没有完全理解你,但我认为这就是你要找的:

SELECT q.questao, r.resposta
FROM questoes as q
INNER JOIN respostas as r
    ON q.id_quest=r.id_quest 
WHERE
    q.id_quest IN (19,20,21) AND
    r.r_valido = '1'

【讨论】:

我对字段“resposta”有 4 个结果(答案),正确答案是字段“r_valido”等于 1。您的查询返回字段“r_valido”等于的值0.【参考方案2】:

您的查询应如下所示:

SELECT q.questao, r.resposta FROM questoes AS q JOIN respostas AS r ON r.id_quest = q.id_quest WHERE q.id_quest IN (19,20,21)  AND r.r_valido = "1"

当您在查询中使用 1 而不是 "1" 时,我还发现了导致该奇怪错误的原因:

我们强烈建议您不要使用数字作为枚举 值,因为它不会在适当的情况下节省存储空间 TINYINT 或 SMALLINT 类型,很容易混淆字符串和 如果您引用,则基础数值(可能不一样) ENUM 值不正确

【讨论】:

问题继续...没有返回正确的值...查询返回 "r_valido" = 0 的值 现在试试 - 用 " 包围数字 1,我在 localhost 上尝试了类似的东西,它似乎有帮助

以上是关于子查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章

查询显示子文档不起作用

为啥我的 Access Max() 子查询不起作用?

Oracle SQL - 多级相关子查询不起作用

当相关子查询不起作用时,压缩子查询

BigQuery - 相关子查询取消嵌套数组不起作用

BigQuery - 联合上的相关子查询不起作用