Mysql 其中子查询=0
我试图写一个查询,检查一个问题是否有任何答案被标记为正确答案Mysql 其中子查询=0,mysql,sql,Mysql,Sql,我试图写一个查询,检查一个问题是否有任何答案被标记为正确答案 SELECT `eu_questions`.`id`, `title` FROM `eu_questions` LEFT JOIN `eu_answers` ON `question_id` = `eu_questions`.`id` AND `correct` = 1 WHERE `eu_questions`.`id` IS NULL ORDER BY `eu_questions`.`id` ASC
SELECT
`eu_questions`.`id`, `title`
FROM
`eu_questions`
LEFT JOIN
`eu_answers` ON `question_id` = `eu_questions`.`id` AND `correct` = 1
WHERE
`eu_questions`.`id` IS NULL
ORDER BY `eu_questions`.`id` ASC
LIMIT 0, 10;
现在我尝试使用子查询,并尝试将子查询设置为用户定义的变量
测试1
测试2
这些查询不会导致错误,它们只返回0个结果,我不明白为什么?我尝试在选择时比较用户定义的变量,这似乎有效并返回正确的值,因此这会让我更加恼火
我是这样检查的:
SELECT
@id := `id` AS `id`,
@count_correct := (SELECT COUNT(`id`) FROM `eu_answers` WHERE `question_id` = @id AND `correct` = 1) AS `count_correct`,
CAST(@count_correct AS UNSIGNED) = 0
FROM
`eu_questions`
ORDER BY `id` ASC
LIMIT 0, 10;
答案-感谢
我以他的例子结束了这个问题,这符合我的需要
SELECT *
FROM `eu_questions`
WHERE
1 != ANY (
SELECT COUNT(`id`)
FROM `eu_answers`
WHERE `question_id` = `eu_questions`.`id`
AND `correct` = 1
)
ORDER BY `id` ASC
LIMIT 0, 10;
您可以在答案表上留下JOIN,并使用where子句只保留没有正确答案的问题
SELECT
`eu_questions`.`id`, `title`
FROM
`eu_questions`
LEFT JOIN
`eu_answers` ON `question_id` = `eu_questions`.`id` AND `correct` = 1
WHERE
`eu_questions`.`id` IS NULL
ORDER BY `eu_questions`.`id` ASC
LIMIT 0, 10;
给你:
SELECT *
FROM eu_questions
WHERE 1 = ANY (
SELECT correct
FROM eu_answers
WHERE question_id = eu_questions.id
);
根据需要添加额外的WHERE和LIMIT条件…除我之外的任何人都拒绝使用水平滚动条?1052-字段列表中的“id”列不明确当查询中的两个表都有id列时会发生错误。因此,eu_问题和eu_答案都有一个id。您需要指定在select和order by以及ONTANKS中引用哪个表的id,这是一个经过修改的版本!我把它添加到问题中itself@Vallentin您的查询还返回没有正确答案的问题。那些答案只有一个的人不知道。为什么您觉得需要使用COUNT?最重要的是,COUNT只返回一行,因此不需要任何,您可以只使用0,因为我希望查询返回没有任何答案或有多个答案的问题。@Vallentin OK,但是你应该用不同的措辞来回答你的问题:我试着写一个查询,检查一个问题是否有任何被标记为正确答案的答案。
SELECT *
FROM eu_questions
WHERE 1 = ANY (
SELECT correct
FROM eu_answers
WHERE question_id = eu_questions.id
);