繁体   English   中英

这个简单的SQL查询有什么问题? 它返回0行

[英]What is wrong with this simple sql query? it returns 0 rows

新手问题,请原谅我的无知:P

我有一个具有不同列的数据集。 测验,名字,等级。 有些学生没有完成所有测验。 我只想做8个测验的人。 我把这段代码:

SELECT *  FROM quiz_attempts 
WHERE qname like "onlinelernen_quiz_1" 
AND qname like "onlinelernen_quiz_2" 
AND qname like "onlinelernen_quiz_3" 
AND qname like "onlinelernen_quiz_4" 
AND qname like "onlinelernen_quiz_5" 
AND qname like "onlinelernen_quiz_6"
AND qname like "onlinelernen_quiz_7" 
AND qname like "onlinelernen_quiz_8"*/

使用INOR可以正常工作,但它会显示所有参加测验的学生。 但是我想要那些完成了所有8个测验的学生

谢谢您的帮助。

当所有条件匹配时,AND给出特定的结果。 使用或

SELECT 
  * 
FROM
  quiz_attempts 
WHERE qname LIKE "onlinelernen_quiz_1" 
  OR qname LIKE "onlinelernen_quiz_2" 
  OR qname LIKE "onlinelernen_quiz_3" 
  OR qname LIKE "onlinelernen_quiz_4" 
  OR qname LIKE "onlinelernen_quiz_5" 
  OR qname LIKE "onlinelernen_quiz_6" 
  OR qname LIKE "onlinelernen_quiz_7" 
  OR qname LIKE "onlinelernen_quiz_8" 

一列(例如qname )不可能在一行中具有多个值。 我假设您的意思是or而不是and 但是,编写此查询的更好方法是in中使用:

SELECT *
FROM quiz_attempts
WHERE qname in ('onlinelernen_quiz_1', 'onlinelernen_quiz_2', 
                'onlinelernen_quiz_3', 'onlinelernen_quiz_4', 
                'onlinelernen_quiz_5', 'onlinelernen_quiz_6', 
                'onlinelernen_quiz_7', 'onlinelernen_quiz_8'
               )

编辑:

如果要让学生参加所有8个测验,请使用汇总:

SELECT studentid
FROM quiz_attempts
WHERE qname in ('onlinelernen_quiz_1', 'onlinelernen_quiz_2', 
                'onlinelernen_quiz_3', 'onlinelernen_quiz_4', 
                'onlinelernen_quiz_5', 'onlinelernen_quiz_6', 
                'onlinelernen_quiz_7', 'onlinelernen_quiz_8'
               )
GROUP BY studentid
HAVING COUNT(DISTINCT qname) = 8;
select studentID, count(*) as attempts
from quiz_attempts 
group by studentID
having  attempts=8

假设您有一列为每次尝试保留学生ID的列,这将返回学生ID。

似乎每次学生进行下一个测验时,您都将测验字符串附加到同一列。

如果是这样,请尝试使用此查询,

SELECT *  FROM quiz_attempts 
WHERE qname like "%onlinelernen_quiz_1%" 
AND qname like "%onlinelernen_quiz_2%" 
AND qname like "%onlinelernen_quiz_3%" 
AND qname like "%onlinelernen_quiz_4%" 
AND qname like "%onlinelernen_quiz_5%" 
AND qname like "%onlinelernen_quiz_6%"
AND qname like "%onlinelernen_quiz_7%" 
AND qname like "%onlinelernen_quiz_8%"

希望它能工作,谢谢。

您的查询无法进行,因为您要查询所有qname类似于“ onlinelernen_quiz_1”的记录, 同时又查询诸如“ onlinelernen_quiz_2” 3等的记录,这是不可能的。

试试这个:它仅显示出现8次与Onlinelernen测验相关的学生的姓名

SELECT Q.stname
FROM quiz_attempts AS Q
WHERE Q.qname Like 'onlinelernen_quiz_%'
GROUP BY Q.stname
HAVING Count(Q.stname)=8;

祝好运!

尝试这个。

SELECT Q.*
FROM   quiz_attempts

q INNER JOIN(SELECT'onlinelernen_quiz_1'作为qname UNION SELECT'onlinelernen_quiz_2'UNION SELECT'onlinelernen_quiz_3'UNION SELECT'onlinelernen_quiz_4'UNION SELECT'onlinelernen_quiz_5'UNION SELECT'onlinelernen_qui__C_7'onlinelernen_qui__ qname = q.qname

如果您在student-qname字段上有一个PK,则可以计算按student分组的行。 像这样:

SELECT student_name,
       SUM(qname) AS total_quiz
FROM quiz_attempts
GROUP BY student_name
HAVING total_quiz = 8

赶上所有 8个测验的学生很累,但可以做类似的事情

SELECT * FROM quiz_attempts q1
WHERE qname like "onlinelernen_quiz_1"
INNER JOIN (
    SELECT * FROM quiz_attempts q2 
    WHERE qname like "onlinelernen_quiz_2"
) ON q1.student_id = q2.student_id
INNER JOIN (
    SELECT * FROM quiz_attempts q3 
    WHERE qname like "onlinelernen_quiz_3"
) ON q2.student_id = q3.student_id

等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM