您如何编写一个 SQL 查询,您可以在其中检查不同的行在其中一个字段中是否具有相同的值?
How do you write an SQL query where you can check if different rows have the same value in one of the fields?
所以我使用以下方法创建了一些表:
CREATE TABLE IF NOT EXISTS `Staff` (
`StaffID` VARCHAR(10) NOT NULL,
`StaffName` VARCHAR(45) NULL,
`StaffAddress` VARCHAR(45) NULL,
`StaffEmailAddress` VARCHAR(45) NULL,
`StaffPhoneNo` VARCHAR(10) NULL,
`Position` VARCHAR(20) NULL,
`Workload` VARCHAR(20) NULL,
`Supervisor` VARCHAR(20) NULL,
PRIMARY KEY (`StaffID`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `staff_works_campaign` (
`CampaignID` VARCHAR(10) NOT NULL,
`StaffID` VARCHAR(10) NOT NULL,
`SalaryGrade` Integer NOT NULL,
`isSup` VARCHAR(3) NOT NULL,
`StaffName` VARCHAR(45) NOT NULL,
PRIMARY KEY (`StaffID`, `CampaignID`),
CONSTRAINT `FK_StaffID3` FOREIGN KEY (`StaffID`) REFERENCES `Staff` (`StaffID`),
CONSTRAINT `FK_CampaignID2` FOREIGN KEY (`CampaignID`) REFERENCES `Advertising_Campaign` (`CampaignID`))
ENGINE = InnoDB;
其中给出了表格:
[
所以基本上我想创建一个查询,其中 returns 所有全职员工的 StaffNames,其主管不是他们所从事的活动的经理。
我的做法是先过滤掉非全职员工:
select s.StaffName
from staff s
where s.Workload = 'Full Time';
这给了我所有的全职工人。下一步是弄清楚他们是否在由他们的一位主管管理的活动中工作。
我的想法是看看 staff_works_campaign.staffname = staff.supervisor
对于全职工作人员,当 campaignID 与非主管工作人员相同时(也就是主管和工作人员都在同一个活动中工作)。
我不确定如何根据相同的 campaignID 进行查询并添加条件 staff_works_campaign.staffname = staff.supervisor.
谢谢!
加入两个表两次,一次为工作人员,一次为主管。
SELECT s.staffName
FROM Staff AS s
JOIN Staff AS sup ON s.Supervisor = sup.StaffName
JOIN staff_words_campaign AS c ON c.StaffID = s.StaffID
JOIN staff_words_campaign AS csup ON csup.StaffID = sup.StaffID AND c.CampaignID = csup.CampaignID
所以我使用以下方法创建了一些表:
CREATE TABLE IF NOT EXISTS `Staff` (
`StaffID` VARCHAR(10) NOT NULL,
`StaffName` VARCHAR(45) NULL,
`StaffAddress` VARCHAR(45) NULL,
`StaffEmailAddress` VARCHAR(45) NULL,
`StaffPhoneNo` VARCHAR(10) NULL,
`Position` VARCHAR(20) NULL,
`Workload` VARCHAR(20) NULL,
`Supervisor` VARCHAR(20) NULL,
PRIMARY KEY (`StaffID`))
ENGINE = InnoDB;
CREATE TABLE IF NOT EXISTS `staff_works_campaign` (
`CampaignID` VARCHAR(10) NOT NULL,
`StaffID` VARCHAR(10) NOT NULL,
`SalaryGrade` Integer NOT NULL,
`isSup` VARCHAR(3) NOT NULL,
`StaffName` VARCHAR(45) NOT NULL,
PRIMARY KEY (`StaffID`, `CampaignID`),
CONSTRAINT `FK_StaffID3` FOREIGN KEY (`StaffID`) REFERENCES `Staff` (`StaffID`),
CONSTRAINT `FK_CampaignID2` FOREIGN KEY (`CampaignID`) REFERENCES `Advertising_Campaign` (`CampaignID`))
ENGINE = InnoDB;
其中给出了表格:
所以基本上我想创建一个查询,其中 returns 所有全职员工的 StaffNames,其主管不是他们所从事的活动的经理。 我的做法是先过滤掉非全职员工:
select s.StaffName
from staff s
where s.Workload = 'Full Time';
这给了我所有的全职工人。下一步是弄清楚他们是否在由他们的一位主管管理的活动中工作。
我的想法是看看 staff_works_campaign.staffname = staff.supervisor
对于全职工作人员,当 campaignID 与非主管工作人员相同时(也就是主管和工作人员都在同一个活动中工作)。
我不确定如何根据相同的 campaignID 进行查询并添加条件 staff_works_campaign.staffname = staff.supervisor.
谢谢!
加入两个表两次,一次为工作人员,一次为主管。
SELECT s.staffName
FROM Staff AS s
JOIN Staff AS sup ON s.Supervisor = sup.StaffName
JOIN staff_words_campaign AS c ON c.StaffID = s.StaffID
JOIN staff_words_campaign AS csup ON csup.StaffID = sup.StaffID AND c.CampaignID = csup.CampaignID