-1

我需要跟踪推销员和他们的脚步。我有两张表前景和活动。

这是 SQL:这里是 Sql Fiddle:http ://sqlfiddle.com/#!2/413e1c

CREATE  TABLE `Prospects` (
  `ID` INT NOT NULL AUTO_INCREMENT ,
  `Name` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Prospects` (`Name`) VALUES ('Tom');
INSERT INTO `Prospects` (`Name`) VALUES ('Dick');
INSERT INTO `Prospects` (`Name`) VALUES ('Harry');
INSERT INTO `Prospects` (`Name`) VALUES ('Oscar');


CREATE  TABLE `Activity` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `Prospect_ID` INT NULL ,
  `Active` VARCHAR(45) NULL ,
  `Step` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) );

INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('1', 'Yes', 'Call');
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('1', 'No', 'Mail');
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('2', 'No', 'Call');
INSERT INTO `Activity` (`Prospect_ID`, `Active`, `Step`) VALUES ('3', 'Yes', 'Mail');

我正在寻找的是每个潜在客户的开放活动。如果 Active = No 那么它应该被排除。

ID    Prospect    Status
1     Tom         Call
2     Dick        -None-
3     Harry       Mail
4     Oscar       -None-

我坚持两点

1.没有数据记录。
2.在我的相关文件中搜索。

よろしくお愿い!

4

1 回答 1

1

您应该能够使用 LEFT JOIN 获得结果并将过滤器放置Active = 'yes'在 JOIN 而不是 WHERE 子句中。然后您可以使用 COALESCE 替换这些null值:

select p.id, p.name, 
  coalesce(a.step, '-None-') Status
from prospects p
left join activity a
  on p.id = a.prospect_id
  and a.active = 'Yes';

请参阅带有演示的 SQL Fiddle

于 2013-06-03T22:53:44.157 回答