Mysql 比较多个字段和一个表
假设我有下一张桌子:毒品和客户:Mysql 比较多个字段和一个表,mysql,sql,Mysql,Sql,假设我有下一张桌子:毒品和客户: idNum | drugName 118 | drug1 118 | drug2 120 | drug1 120 | drug2 120 | drug3 121 | drug1 121 | drug3 122 | drug2 客户: idNum
idNum | drugName
118 | drug1
118 | drug2
120 | drug1
120 | drug2
120 | drug3
121 | drug1
121 | drug3
122 | drug2
客户:
idNum | Name | lastName |
118 | name1 | last1 |
119 | name2 | last2 |
120 | name3 | last3 |
121 | name4 | last4 |
122 | name5 | last5 |
我想创建一个新表,其中包含与idNum='118'的客户服用相同药物的所有id、姓名和姓氏
这意味着我需要一张只有“120”的桌子
到目前为止,我已经:
SELECT Clients.idNum,firstName, lastName
FROM Clients, Drugs
WHERE Drugs.idNum=Clients.idNum
AND Clients.idNum<>'118'
AND Clients.idNum IN
(Select idNum From Drugs Where drugName IN
(Select drugName from Drugs where idNum='118'))
去“毒品”领域
或者,我如何为每个客户创建一个表,然后将其与表进行比较?这是一个棘手的查询。其想法是为每个客户生成与客户118匹配的药物列表。这是“主”列表。然后,使用
left-outer-join
为每个客户输入实际药物。如果匹配失败,则过滤掉客户端:
select master.idNum, master.firstName, master.lastName
from (select d.drugName, c.*
from Drugs d cross join
Clients c
where d.idnum = 118
) master left outer join
Drugs d
on master.drugName = d.drugName and
master.idNum = d.idNum
group by master.idNum, master.firstName, master.lastName
having count(d.drugName) = count(master.drugName);
SQL小提琴是。如果您想另外过滤掉客户机118,那么将嵌套的where子句更改为类似于d.idnum=118和c.idnum 118
您还应该学习正确的连接语法和表别名的使用。谢谢,但这个答案仍然给出了121和122。这不是我需要的。
select master.idNum, master.firstName, master.lastName
from (select d.drugName, c.*
from Drugs d cross join
Clients c
where d.idnum = 118
) master left outer join
Drugs d
on master.drugName = d.drugName and
master.idNum = d.idNum
group by master.idNum, master.firstName, master.lastName
having count(d.drugName) = count(master.drugName);