MySQL 子查询 returns 多行,我想将一个值与所有行进行比较

MySQL subquery returns multiple rows, I want to compare a value to all rows

我正在尝试 select 来自 table 的单个(随机)记录,其中一个值介于 1 和 9 之间,并且它和当时存在的用户 ID 是不存在于单独的 table 中(即它们之前没有一起使用过):

SELECT QuestionID 
FROM Questions 
WHERE ((Marks BETWEEN 1 AND 9) 
    AND QuestionID !=(
        SELECT QuestionID 
        FROM Username.History 
        WHERE UserID = 1
    )
) ORDER BY RAND() LIMIT 0,1;

但是当我 运行 这个时,我得到一个子查询 returns 多行错误,有没有办法让它将 QuestionID 与历史记录中的所有 QuestionID 进行比较?

是的,您可以使用 NOT IN:

SELECT QuestionID 
FROM Questions 
WHERE ((Marks BETWEEN 1 AND 9) 
    AND QuestionID NOT IN (
        SELECT QuestionID 
        FROM Username.History 
        WHERE UserID = 1
    )
) ORDER BY RAND() LIMIT 0,1;

只需将 != 替换为 NOT IN