我正在构建一个调查对象,有三个表:usersquestionsanswers,其中answers包含用户回答的每个问题的记录(如果用户还没有回答给定的问题,则没有记录)。
我的数据结构如下:

CREATE TABLE users (
    id INT NOT NULL,
    name VARCHAR(255),
    PRIMARY KEY (id)
    )

CREATE TABLE questions (
    id INT NOT NULL,
    text VARCHAR(255),
    PRIMARY KEY (id)
    )

CREATE TABLE answers (
    id INT NOT NULL,
    id_q INT NOT NULL,
    id_u INT NOT NULL,
    answer VARCHAR(255),
    PRIMARY KEY (id),
    FOREIGN KEY (id_q) REFERENCES questions(id),
    FOREIGN KEY (id_u) REFERENCES users(id)
    )

我试过一些基本的LEFT JOIN方法,但都没有用。我用了ORDER BY RAND() LIMIT 0,1来表示问题的随机性部分。我怀疑这不像我想的那么简单。(我在自学SQL。。我需要使用那些我还不知道的子查询吗?)
如何编写MySQL来选择一个没有指定用户相应答案的随机问题?

最佳答案

你在正确的轨道上与LEFT JOIN。。。
您可以使用它对INNER JOIN进行逆选择。很简单:

SELECT    q.*
FROM      questions q
LEFT JOIN answers a ON q.id = a.id_q AND a.id_u = <user id here>
WHERE     a.id IS NULL
ORDER BY  RAND()
LIMIT     1

关于mysql - SQL选择随机未回答的事情,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12120874/

10-09 20:12