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表示されないすべてのemployeIdを取得しようとしていますquery1

私は試してみました

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

もちろん、query1複数の列を返すため、それは機能しません

MySQLクエリでそれを行うことは可能ですか? または、これを行うには PHP アルゴリズムを作成する必要がありますか??

4

2 に答える 2

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 に答える
2

最初のクエリのテーブルに対する 2 番目のクエリの条件。従業員テーブルに重複する名前と名がありますか? whereそうでない場合は、各句に次を追加できます。

and emp.Active = 1

Actifとが同じ場合Active、行は取得されません。

より一般的なアプローチは、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 に答える