1

我正在构建一个调查项目,并且有三个表: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 来选择一个没有来自指定用户的相应答案的随机问题?

4

1 回答 1

3

你在正确的轨道上LEFT JOIN......

您可以使用它对INNER JOINwith进行反向选择WHERE column IS NULL。就是这么简单:

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
于 2012-08-25T09:56:17.553 回答