2015-03-13 4 views
0

Во-первых, позвольте мне описать сценарий, подобный тому, с которым я столкнулся; чтобы лучше объяснить мою проблему. В этом случае я создаю систему, которая должна выбрать «n» случайных записей в блоге из таблицы, а затем получить ответы на все выбранные сообщения.SQLite Inner Join with Limit on Left Table

Представьте свою структуру таким образом:

blog_posts(id INTEGER PRIMARY KEY, thepost TEXT) 
blog_replies(id INTEGER PRIMARY KEY, postid INTEGER FOREIGN KEY REFERENCES blog_posts(id), thereply TEXT) 

Это текущий SQL у меня есть, но я получаю сообщение об ошибке:

SELECT blog_post.id, blog_post.thepost, blog_replies.id, blog_replies.thereply 
FROM (SELECT blog_post.id, blog_post.thepost FROM blog_post ORDER BY RANDOM() LIMIT ?) 
INNER JOIN blog_replies 
ON blog_post.id=blog_replies_options.postid; 

Здесь ошибка:

sqlite3.OperationalError: no such column: hmquestion.id 
+0

Ошибка, которую вы получаете, потому что вы ничего не выбираете из этой таблицы. Вы перевели логику в свой подзапрос. Попробуйте добавить псевдоним к вашему подзапросу 'hmquestion' -' select ... from (...) hmquestion inner ... ' – sgeddes

+0

В тексте упоминаются три таблицы, которые я не вижу в SQL. Можете ли вы исправить вопрос, так что текст и SQL относятся к одной теме? –

+0

@sgeddes, сможете ли вы расширить то, что вы говорите. Я довольно новичок в SQL и не совсем уверен, что вы имеете в виду. – Braden1996

ответ

0

Вашему запросу нужен псевдоним, добавленный в подзапрос. Это позволит вам ссылаться на поля из подзапроса внутри внешнего запроса:

SELECT hmquestion.id, hmquestion.question, 
    hmquestion_options.id, hmquestion_options.option 
FROM (SELECT hmquestion.id, hmquestion.question 
     FROM hmquestion ORDER BY RANDOM() LIMIT ?) AS hmquestion <--Add Alias Here 
    INNER JOIN hmquestion_options 
     ON hmquestion.id=hmquestion_options.questionid; 

Как есть, вы внешний запрос не знает, что hmquestion ссылки.

+0

Ваш метод, казалось, исправить мою проблему. Спасибо :) – Braden1996