0

我有这个查询:

query 1 = 
SELECT emp.employeId,emp.nom,emp.prenom,msg.note,msg.quelleDate, emp.remarques, emp.autonome, embauche.actif as embaucheActif, embauche.embId, 'M' as source 
FROM employes emp 
LEFT JOIN messages msg ON msg.employeId = emp.employeId 
LEFT JOIN embauche ON embauche.employeId = emp.employeId 
WHERE emp.actif = 1 
AND msg.quelleDate BETWEEN '2013-01-01' AND '2013-01-31' 

UNION 

SELECT emp.employeId,emp.nom,emp.prenom,msg.note,msg.quelleDate, emp.remarques, emp.autonome, embauche.actif as embaucheActif, embauche.embId, 'A' as source 
FROM employes emp 
LEFT JOIN messagesautre msg ON msg.employeId = emp.employeId 
LEFT JOIN embauche ON embauche.employeId = emp.employeId 
WHERE emp.actif = 1 
AND msg.quelleDate BETWEEN '2013-01-01' AND '2013-01-31' 

ORDER BY nom,prenom,quelleDate

而这个查询

query2 = select nom,prenom from employes where actif = 1;

我正在尝试从中获取所有query2没有出现的employeeIdquery1

我试过了

select employeId,nom,prenom from employes where actif = 1 AND employeId in ( query1 );

但当然这不起作用,因为query1返回超过 1 列

是否可以使用 MySQL 查询来做到这一点?或者我必须编写 PHP 算法来做到这一点?

4

2 回答 2

2

您在第二个查询中对第一个查询中的表的条件。雇员表中是否有重复的名字和名字?如果没有,您可以在每个where子句中添加以下内容:

and emp.Active = 1

如果ActifActive相同,那么您将永远不会得到任何行。

更通用的方法是在 where 子句中添加以下内容:

and not exists (select 1 from employes emp2 where emp2.prenom = emp.prenom and emp2.nom = emp.prenom)
于 2013-01-21T15:52:32.393 回答
2

这样做是否简单:

select nom,prenom from employes AS emp 
LEFT JOIN embauche AS emb  
ON emp.employeID = emb.employeID
LEFT JOIN messages AS msg
ON emp.employeID = msg.employeID
where actif <> 1
AND msg.quelleDate NOT BETWEEN '2013-01-01' AND '2013-01-31';

样本数据:

CREATE TABLE employes (
  employeId int auto_increment primary key,
  nom varchar(30),
  prenom varchar(30),
  remarques longtext,
  autonome longtext
  );

CREATE TABLE messages (
  messagesID int auto_increment primary key,
  employeId int,
  quelleDate DATE,
  note longtext

  );

CREATE TABLE embauche(
  embId int auto_increment primary key,
  employeID int,
  actif int
  );

INSERT INTO employes (nom,prenom,remarques,autonome)
VALUES ("hollande", "francois", "24th President of France", "?"),
("Sarkozy", "Nicolas", "23th President of France", "?");


INSERT INTO messages (employeId,quelleDate,note)
VALUES (1, now(),"jlkjlkahkjhkj"),
(2,NOW() - INTERVAL 365 DAY,"jlkjlkahkjkjjhajhjheuioueoijhkj");


INSERT INTO embauche (employeId,actif)
VALUES (2, 2),
(1,1);

演示 sql 小提琴

于 2013-01-21T18:51:23.820 回答