MySQL - 根据另一个表的列计数从一个表中获取记录

MySQL  - 根据另一个表的列计数从一个表中获取记录

问题描述:

I have a table called students and a table called documents. Each student can have any amount of document entries in the documents table, but might also have no document entries. Some of the documents might've been approved, others not.

table 1: students, table 2 documents. student PK is user_id and document PK is document_id, and document table has user_id in it as well. document table has column approved which can contain either a Yes or a No. So these two tables are linked by user_id

How can I write a MySQL query (or even better, in Active Record style for Code Igniter) that can list all students that have at least 1 unapproved document?

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

表1:学生 code>,表2 文档 code>。 student code> PK是 user_id code>和 document code> PK是 document_id code>, document code>表有 user_id code>也在其中。 document code>表有 approved code>列,可以包含Yes或No.所以这两个表由 user_id code> p> 链接

如何编写MySQL查询(甚至更好,在Code Igniter的Active Record风格中),可以列出所有至少有1个未批准文档的学生? p> div>

mysql> create table students (student_number int, student_first_name char(25), student_Last_name char(25));

Query OK, 0 rows affected (0.34 sec)

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

Query OK, 0 rows affected (0.32 sec)

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

Query OK, 3 rows affected (0.19 sec) Records: 3 Duplicates: 0 Warnings: 0

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

Query OK, 3 rows affected (0.16 sec) Records: 3 Duplicates: 0 Warnings: 0

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

+----------------+--------------------+-------------------+ | student_number | student_first_name | student_Last_name | +----------------+--------------------+-------------------+ | 1 | F1 | L1 | +----------------+--------------------+-------------------+ 1 row in set (0.02 sec)

select distinct students.name from students join documents on 
students.user_id=documents.user_id where documents.user_id is No