【问题标题】:MySQL - Get records from one table based on count of another table's columnMySQL - 根据另一个表的列数从一个表中获取记录
【发布时间】:2018-12-08 01:57:46
【问题描述】:

我有一个名为students 的表和一个名为documents 的表。每个学生可以在documents 表中拥有任意数量的文档条目,但也可能没有文档条目。有些文件可能已经获得批准,有些则没有。

表 1:students,表 2 documentsstudent PK 是 user_iddocument PK 是 document_iddocument 表中也有 user_iddocument 表有列 approved 可以包含是或否。所以这两个表由 user_id 链接

我如何编写一个 MySQL 查询(或者更好,使用 Code Igniter 的 Active Record 样式)来列出至少有 1 个未批准文档的所有学生?

【问题讨论】:

  • 努力,我们会帮助,不要,我们不会。
  • 我已经坐了一个小时了。我没有什么具体的东西可以给你看。我尝试了使用有子句的连接和内部查询的变体,但没有一个成功。仅仅因为我没有在这里发布我的努力并不意味着我没有做任何努力。
  • 我们如何知道文件是否已被批准?你有布尔字段吗?
  • 您正在寻找JOIN。至于细节,因为你的问题没有给出任何我们只能猜测。一个好的问题将有一个示例模式。使用SHOW CREATE TABLE 并编辑您的问题。
  • 有一个名为“approved”的枚举列,其值为“Yes”或“No”

标签: php mysql codeigniter activerecord


【解决方案1】:
mysql> create table students (student_number int, student_first_name char(25), student_Last_name char(25));

查询正常,0 行受影响(0.34 秒)

mysql> create table documents (student_number int, document_name char(25), approved bool);

查询正常,0 行受影响(0.32 秒)

mysql> insert into students values (1,"F1","L1"),(2,"F2","L2"),(3,"F3","L3");

查询正常,3 行受影响(0.19 秒) 记录:3 重复:0 警告:0

mysql> insert into documents values (1,"D1",0),(1,"D2",1),(3,"D3",1);

查询正常,3 行受影响(0.16 秒) 记录:3 重复:0 警告:0

mysql> select * from students where student_number in (select student_number from documents where !approved);

+----------------+--------------------+-------- ------------+ |学生号 |学生名字 |学生姓氏 | +----------------+--------------------+------------ --------+ | 1 | F1 | L1 | +----------------+--------------------+------------ --------+ 一组中的 1 行(0.02 秒)

【讨论】:

  • 谢谢。我需要加入更多表格并添加一个分组(因为我的问题已简化为我正在努力解决的部分),但您的回答让我走上了正确的轨道。
  • @kobus - 很高兴你觉得它有帮助。
【解决方案2】:
select distinct students.name from students join documents on 
students.user_id=documents.user_id where documents.user_id is No

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 2010-12-31
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    相关资源
    最近更新 更多