如果子查询为空,则会出现MySQL问题

时间:2017-06-13 14:49:47

标签: mysql sql null subquery left-join

我有5张桌子(我只会谈谈请求中的内容):

  • 员工(登录,代理商ID)
  • FreqTest(id,clientEmail,employeeLogin)
  • QuestTest(id,clientEmail,employeeLogin)
  • SitTest(id,clientEmail,employeeLogin)
  • 客户(电子邮件,年龄,性别)

这是我的要求:

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 FreqTest QuestTest ,则客户 B 3 < / strong>和客户 C ,我收到 A B
  • 的电子邮件
  • 如果客户 A 3 测试,则客户 B 3 测试,客户 C ,我仍然收到 A B
  • 的电子邮件
  • 如果没有客户 3 不同的测试,无论我什么都没得到

我想也许是因为如果任何子查询(Freq,Quest或Sit)没有返回任何结果,那么它就是NULL。

如果我不清楚或者我是否错误地翻译了这一切,我想再次道歉。

1 个答案:

答案 0 :(得分:0)

使用LEFT JOIN来避免NULL引用

<servlet-mapping>
    <servlet-name>socialcare-dispatcher</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>