SQL查询 - 尝试使用AND / OR和JOINS基于某些条件显示结果

时间:2015-04-13 15:08:48

标签: mysql sql

只要符合以下条件,尝试在系统中显示所有提案:

  • 来源必须是主管
  • 记录表中的status_code不得为8或3

我尝试了很多方法来尝试使这项工作,但我不断得到不同的数据,这不是我想要的。

问题是表格的设置方式。理论上,学生可以申请提案,如果发生这种情况,记录会自动添加到“记录”表中,状态设置为“6”表示待处理。然后在整个申请过程中多次更改此状态。

我需要的是向用户显示尚未采取的所有提案。状态代码表示“3”(由学生接受,因此另一名学生无法接受)和“8”(不可用)。 注意:并非所有提案都可能在此表中有记录(学生尚未申请)

这是迄今为止满足成为“主管”的第一个条件的查询

SELECT p.proposal_id, p.proposal_title, 
p.description, u.user_record_id, u.forename, 
u.surname, c.course_title, r.*, 
GROUP_CONCAT(DISTINCT t.tag_title) AS tags 
FROM proposal p 
      LEFT JOIN user u on u.user_record_id = p.user_record_id
      LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
      LEFT JOIN tag_details t on t.tag_code = pt.tag_code
      LEFT JOIN course_details c on c.course_code = p.course_code
      LEFT JOIN record r on r.proposal_id = p.proposal_id
      WHERE p.source = "Supervisor"
      GROUP BY p.proposal_id

我试图让它显示所有可用的记录:

SELECT p.proposal_id, p.proposal_title, 
p.description, u.user_record_id, u.forename, 
u.surname, c.course_title, r.*, 
GROUP_CONCAT(DISTINCT t.tag_title) AS tags 
FROM proposal p 
      LEFT JOIN user u on u.user_record_id = p.user_record_id
      LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
      LEFT JOIN tag_details t on t.tag_code = pt.tag_code
      LEFT JOIN course_details c on c.course_code = p.course_code
      LEFT JOIN record r on r.proposal_id = p.proposal_id
      WHERE p.source = "Supervisor"
      AND (r.status_code != 3 OR r.status_code !=8)
      GROUP BY p.proposal_id

上述查询仍会返回状态代码为3的提案,但无法显示尚未申请的提案。

生成的SQLFiddle:http://sqlfiddle.com/#!9/b89a9/1/0

任何帮助都会非常感谢大家!谢谢。

1 个答案:

答案 0 :(得分:1)

原来我错过了OR声明来实现我的目标。

为了得到我需要的最终结果,查询被修改为:

SELECT p.proposal_id, p.proposal_title, p.description, u.user_record_id, u.forename, u.surname, c.course_title, r.*, GROUP_CONCAT(DISTINCT t.tag_title) AS tags FROM proposal p 
      LEFT JOIN user u on u.user_record_id = p.user_record_id
      LEFT JOIN proposal_tags pt on pt.proposal_id = p.proposal_id
      LEFT JOIN tag_details t on t.tag_code = pt.tag_code
      LEFT JOIN course_details c on c.course_code = p.course_code
      LEFT JOIN record r on r.proposal_id = p.proposal_id
      WHERE p.source = "Supervisor"
      AND (r.status_code not in (3,8) OR r.status_code IS NULL)
      GROUP BY p.proposal_id

成功收回所有可用的提案,这些提案来自主管和那些在“记录”表中没有记录的提案。

感谢所有帮助过的人