Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.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中模拟一个包含多个表和连接的Intersect_Mysql_Sql_Intersect - Fatal编程技术网

在MySQL中模拟一个包含多个表和连接的Intersect

在MySQL中模拟一个包含多个表和连接的Intersect,mysql,sql,intersect,Mysql,Sql,Intersect,我需要在MySQL中模拟Intersect查询 SELECT c.cust_code, cust_fname, cust_lname FROM lgcustomer c JOIN lginvoice i ON c.cust_code = i.cust_code WHERE employee_id = 83649 INTERSECT SELECT c.cust_code, cust_fname, cust_lname FRO

我需要在MySQL中模拟Intersect查询

    SELECT c.cust_code, cust_fname, cust_lname  
      FROM lgcustomer c JOIN lginvoice i ON c.cust_code = i.cust_code 
      WHERE employee_id = 83649 
    INTERSECT 
    SELECT c.cust_code, cust_fname, cust_lname  
      FROM lgcustomer c JOIN lginvoice i ON c.cust_code = i.cust_code  
      WHERE employee_id = 83677 
    ORDER BY cust_lname, cust_fname; 
我曾尝试使用EXISTS,但没有成功。我想我加入错了

    SELECT C.CUST_CODE, CUST_FNAME, CUST_LNAME
      FROM LGCUSTOMER C JOIN LGINVOICE I ON C.CUST_CODE = I.CUST_CODE
      WHERE EMPLOYEE_ID = 83649
      AND EXISTS (SELECT * 
                 FROM LGCUSTOMER C JOIN LGINVOICE I ON C.CUST_CODE = I.CUST_CODE
                 WHERE EMPLOYEE_ID = 83677)
    ORDER BY CUST_LNAME, CUST_FNAME;
各表如下:

+-------------+
|客户|
+-------------+
|客户代码|
|客户名称
|客户名称
+-------------+


+--------------+
|LGINVOICE|
+--------------+
|客户代码|
|员工ID |
+--------------+


我需要一个查询来从两个唯一的员工(83649和83677)提取所有具有发票的客户代码。

Hmmm。我想到了聚合:

SELECT c.cust_code, cust_fname, cust_lname  
FROM lgcustomer c JOIN
     lginvoice i
     ON c.cust_code = i.cust_code 
WHERE employee_id IN ( 83649, 83677 )
GROUP BY c.cust_code, cust_fname, cust_lname 
HAVING COUNT(DISTINCT employee_id) = 2;

这也会删除重复项,
INTERSECT

您可以使用两个子查询之间的内部joij模拟相交

select * from  (
  SELECT c.cust_code, cust_fname, cust_lname  
  FROM lgcustomer c 
  JOIN lginvoice i ON c.cust_code = i.cust_code 
  WHERE employee_id = 83649 
) t1 
INNER JOIN  (
  SELECT c.cust_code, cust_fname, cust_lname  
  FROM lgcustomer c 
  JOIN lginvoice i ON c.cust_code = i.cust_code  
  WHERE employee_id = 83677 
) t2 on t1.cust_code = t2.cust_code 
ORDER BY cust_lname, cust_fname; 

你能说明你想做什么吗?你的问题是最后一段吗?是的,这很好用!我还在学习SQL,谢谢你的帮助!