2013-08-31 134 views
1

這裏是我的架構:子查詢不起作用

 

    Table "Questoes"; 
    +----------+--------------+------+-----+---------+----------------+ 
    | Field | Type   | Null | Key | Default | Extra   | 
    +----------+--------------+------+-----+---------+----------------+ 
    | id  | int(11)  | NO | PRI | NULL | auto_increment | 
    | id_quest | int(11)  | NO |  | NULL |    | 
    | questao | varchar(255) | NO |  | NULL |    | 
    | nivel | int(11)  | NO |  | NULL |    | 
    | tipo  | varchar(255) | NO |  | NULL |    | 
    +----------+--------------+------+-----+---------+----------------+ 

    Table "Respostas"; 

    +----------+---------------+------+-----+---------+----------------+ 
    | Field | Type   | Null | Key | Default | Extra   | 
    +----------+---------------+------+-----+---------+----------------+ 
    | id  | int(11)  | NO | PRI | NULL | auto_increment | 
    | id_quest | int(11)  | NO |  | NULL |    | 
    | resposta | varchar(255) | NO |  | NULL |    | 
    | r_valido | enum('0','1') | NO |  | NULL |    | 
    +----------+---------------+------+-----+---------+----------------+ 

我的查詢是:

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) 

我需要的是現場questao從表Questoes和現場resposta從表respostas哪裏字段r_valido = 1。 該字段resposta有4個結果,並且只有一個是有效的,換句話說,在字段r_valido = 1

+0

你能提供一個示例數據集作爲SQL小提琴,並帶有預期的結果? – halfer

+0

那些大桌子?也許你可以將這些表格/列名翻譯成英文,我無法理解西班牙文? –

回答

1

您的查詢應該是這樣的:

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類型的存儲上,並且很容易混淆字符串和 以下的值英數值(這可能是不一樣的),如果你引用 枚舉值不正確

+0

問題繼續...不返回正確的值...查詢返回的值其中「r_valido」= 0 – IRONLORD

+1

現在就試試吧 - 用「圍繞數字1,我​​嘗試了類似的東西在localhost上,它似乎以幫助 – hynner

+0

其作品,tks! 許多時候只是一個簡單的「」 – IRONLORD

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' 
+0

我有4個結果(答案)字段「resposta」和正確的答案是當字段「r_valido」等於1.您的查詢返回值其中字段「r_valido」等於0. – IRONLORD

+0

用戶hynner給了我正確的答案。 – IRONLORD