子查询不起作用
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 = 1
。
resposta
字段有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 上尝试了类似的东西,它似乎有帮助以上是关于子查询不起作用的主要内容,如果未能解决你的问题,请参考以下文章