2013-08-31 2 views
1

Вот моя схема:Sub-запрос не работает

 

    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 , и легко перемешать строки и underl Числовые значения лнение (которые не могут быть одинаковыми), если вы цитируете значения ENUM неправильно

+0

Проблема продолжается ... не возвращает правильные значения ... запрос возвращает значения, где «r_valido» = 0 – IRONLORD

+1

Попробуйте сейчас - с «arround number 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 дал мне правильный ответ. Tks в любом случае – IRONLORD

Смежные вопросы