mysql - 如何编写连接 3 个表的查询

标签 mysql sql join subquery relational-division

我在使用三个不同表的查询时遇到问题。我也相信我会使用关键词“不存在”和“不在内部”,但我对此并不完全肯定。我将发布查询定义、我正在使用的表以及我到目前为止所尝试的内容。感谢您提前的帮助!

查询:

Find the users that create jobs that utilize all proteins.

表格:

CREATE TABLE Protein(pid INTEGER,name varchar(50),PRIMARY KEY(pid));

CREATE TABLE Job(uid INTEGER,job_id INTEGER AUTO_INCREMENT,input 
varchar(500),status varchar(100),start_time time,finish_time time,FOREIGN 
KEY(uid) REFERENCES User(uid) ON DELETE CASCADE,PRIMARY KEY(job_id));

CREATE TABLE User(uid INTEGER AUTO_INCREMENT,address VARCHAR(40),city 
VARCHAR(20),state VARCHAR(20),zipcode VARCHAR(10), username 
VARCHAR(10),email VARCHAR(30),primary key (uid));

CREATE TABLE job_protein(job_id INTEGER, pid INTEGER, PRIMARY KEY(job_id, pid));

到目前为止我尝试过...

SELECT u.uid, j.jobid, count(j.jobid)
FROM job j
INNER JOIN job_proteins p
ON j.jobid = p.jobid
INNER JOIN user u
ON p.uid = u.uid
GROUP BY j.jobid
HAVING count(j.jobid) = (SELECT count(pid) FROM Protein);

我所拥有的能找到利用每种蛋白质的工作吗?

最佳答案

您的 group by 子句中缺少成员:

SELECT u.uid, j.jobid, count(j.jobid)
FROM job j
INNER JOIN job_proteins p
ON j.jobid = p.jobid
INNER JOIN user u
ON p.uid = j.uid -- and you had wrong alias here
GROUP BY u.uid, j.jobid -- right here
HAVING count(j.jobid) = (SELECT count(pid) FROM Protein);

关于mysql - 如何编写连接 3 个表的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29545490/

相关文章:

mysql - 数据库设计 : Index Varchar

mysql - 如何将此 MySQL 命令转换为 SQLite 命令?

mysql - 向数据库插入一条sql语句

SQL 按日期连接和排序单个主题

mysql - 由于锁定,SQL 插入从一台服务器失败而在另一台服务器上正常工作

mysql - 在包含两个表的记录的交叉表的单个查询中选择三个记录 - MYSQL

mysql - 存在与所有、任何、某些

php - 在 php 中制作 mysql 单例数据库类的任何更简单/更好的方法?

mysql - 一行多个答案

Postgres 中切片数据集的 SQL 查询