Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 比较多个字段和一个表_Mysql_Sql - Fatal编程技术网

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);