gpt4 book ai didi

mysql - 在从 3 个表获取数据的查询中使用除法运算符

转载 作者:行者123 更新时间:2023-11-29 22:29:22 25 4
gpt4 key购买 nike

我在编写从 3 个不同表获取信息的查询时遇到问题。现在我有一个正在运行的查询...但我没有得到正确的结果。通过与我的同行交谈,我发现执行此查询的一种方法是使用除法运算符,但我对如何执行此操作感到困惑。我将向您展示查询定义、表格,然后是我编写的查询,也许这里有人可以帮助我修复我的查询或向我解释如何使用这个除法运算符!

查询定义:

Find the users that utilize every protein in their jobs. 
So basically just find the users that have used every protein once.
This could be within 1 job or 100 jobs.

表格:

CREATE TABLE Job(uid INTEGER,job_id INTEGER AUTO_INCREMENT,input varchar(500),
FOREIGN KEY(uid) REFERENCES User(uid) ON DELETE CASCADE,
PRIMARY KEY(job_id))ENGINE = InnoDB;

CREATE TABLE Protein_Info(pid INTEGER,sequence varchar(200),
FOREIGN KEY(pid) REFERENCES Protein(pid),PRIMARY KEY(pid))ENGINE = InnoDB;

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

insert into Job(uid, job_id, input) values(1, 1, abc),(2, 2, bce), (1, 3, aeo),(3, 4, pqo),(1, 5, bce), (1, 6, pqo)
insert into protein_info(pid, sequence) values (1,abc),(2,bce)(3,aeo),(4,pqo)
insert into protein(pid, name) values (1,a),(2,b),(3,c),(4,d)

所以在插入这些值之后......我想从用户 id 1 检索信息,因为他是使用所有蛋白质的人。我希望输出是用户 ID 和使用所有蛋白质的用户的作业计数。在本例中,它将是用户 ID 1。

这两个表根据输入和序列连接。当 Job.input = Protein_Info.sequence 时我加入他们。

我尝试过的查询。

SELECT u.uid, count(j.job_id) FROM Job j 
INNER JOIN Protein_Info p ON j.input = p.sequence
GROUP BY j.job_id
HAVING count(j.job_id) = (SELECT count(pid) FROM Protein);

最佳答案

这是一个fiddle

你很接近:

SELECT j.uid, count(j.job_id) , count(distinct j.Input)
FROM Protein_info P
INNER JOIN Job J
ON j.input = p.sequence
GROUP BY j.uid
HAVING count(distinct j.Input) = (SELECT count(pid) FROM Protein);

你的错误是:

  1. 分组依据需要按 uID。
  2. 需要计算不同的 j.inputs 而不是作业。

关于mysql - 在从 3 个表获取数据的查询中使用除法运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29949372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com