如果子查询为空,则出现MySQL问题
我有5张桌子(我只谈请求中没有的):如果子查询为空,则出现MySQL问题,mysql,sql,null,subquery,left-join,Mysql,Sql,Null,Subquery,Left Join,我有5张桌子(我只谈请求中没有的): 员工(登录名,代理ID) 频率测试(id、客户邮件、员工登录) 任务测试(id、客户邮件、员工登录) 情景测试(id、客户邮件、员工登录) 客户(电子邮件、年龄、性别) 这是我的要求: SELECT Client.email, Client.age, Client.gender FROM Client, (SELECT FreqTest.clientEmail FROM FreqTest, (SELECT Employee.login
- 员工(登录名,代理ID)
- 频率测试(id、客户邮件、员工登录)
- 任务测试(id、客户邮件、员工登录)
- 情景测试(id、客户邮件、员工登录)
- 客户(电子邮件、年龄、性别)
SELECT Client.email, Client.age, Client.gender
FROM Client,
(SELECT FreqTest.clientEmail
FROM FreqTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE FreqTest.employeeLogin = EmployeeByAgency.login) Freq,
(SELECT QuestTest.clientEmail
FROM QuestTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE QuestTest.employeeLogin = EmployeeByAgency.login) Quest,
(SELECT SitTest.clientEmail
FROM SitTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE SitTest.employeeLogin = EmployeeByAgency.login) Sit
WHERE Client.email = Freq.emailClient
OR Client.email = Quest.emailClient
OR Client.email = Sit.emailClient
GROUP BY Client.email;
我想要在代理机构进行测试的客户的电子邮件。
它几乎在任何情况下都有效,除非没有客户在同一机构进行了3次测试
我不得不试着用英语翻译,如果我的英语不完美,我很抱歉
因此,我要明确(与同一机构):
- 如果客户A有频率测试和任务测试,客户B有3,客户C没有的,我会收到A和B的电子邮件
- 如果客户A进行了3次测试,客户B也进行了3次测试,客户C没有进行测试,我仍然会收到A和B的电子邮件
- 如果没有客户进行了3次不同的测试,无论我得到什么都没有
如果我不清楚或者翻译这些内容时出错,我想再次道歉。使用左连接避免空引用
SELECT Client.email, Client.age, Client.gender
FROM Client
LEFT JOIN (SELECT FreqTest.clientEmail
FROM FreqTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE FreqTest.employeeLogin = EmployeeByAgency.login) Freq
ON Client.email = Freq.emailClient
LEFT JOIN (SELECT QuestTest.clientEmail
FROM QuestTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE QuestTest.employeeLogin = EmployeeByAgency.login) Quest
ON Client.email = Quest.emailClient
LEFT JOIN (SELECT SitTest.clientEmail
FROM SitTest,
(SELECT Employee.login
FROM Employee
WHERE Employee.agencyID = 'anID') EmployeeByAgency
WHERE SitTest.employeeLogin = EmployeeByAgency.login) Sit
ON Client.email = Sit.emailClient
WHERE Freq.emailClient is NOT NULL
OR Quest.emailClient IS NOT NULL
OR Sit.emailClient IS NOT NULL
GROUP BY Client.email;
工作如期进行,谢谢。我为笨拙地处理空值感到难过。