MySQL:在三个表中选择

时间:2014-04-18 18:36:56

标签: mysql if-statement

我正在制定一个系统,其中一些快递员可能会要求他们的首选旅行。如果有多名员工要求参加特定的旅行,我想先把它交给那个开始为我们工作的人。我想在概述页面上显示一个笑脸或其他内容,如

  1. 巡回演出
  2. 你会踢出某人
  3. 已经有人首先提出要求
  4. 我试了几个小时,但是我无法获得它的MySQL代码。 我有3个相关的表格。

    1. 雇员:
      • 雇员
      • 参赛日期
      • ...
      • tourid
      • 细节...
      • 雇员-ID
      • tourid
    2. 我想选择所有旅行,包括他们的详细信息 - >易

      我想(至少)添加另一个字段来计算该巡视中的请求以进行进一步查询。我想我需要使用1. query

      中的tourid进行选择

      最好的是一个查询,包括带结果的if-else语句,如果游览可用,tourid后面的字段将为NULL,或者显示请求该游览的最老员工的进入日期如果请求帐户> 0

      我非常感谢你的任何建议!

      谢谢!

2 个答案:

答案 0 :(得分:0)

要选择所有旅行,包括他们的详细信息,您只需

Select * from Tours;

现在,您可以向Tours表中添加一个名为count的字段,该字段可跟踪该特定tourID的所有传入请求。 优选地,每当在Request表中进行更改时,保持触发器更新count的值,即,如果发出新请求,或者修改/删除旧请求。

或者,您可以选择不存储该值,而是执行

Select count(employeeID) from Requests, Tours where Requests.tourID = Tours.tourID;

现在,对于这些员工中的每一位,您希望获得最早的加入日期。

Select min(date_of_entry) from Employees where employeeID in (Select count(employeeID) from Requests, Tours where Requests.tourID = Tours.tourID);

我不明白你对#id;"后面的字段是什么意思,但我希望这至少可以部分回答你的问题。

答案 1 :(得分:0)

  

2)我想(至少)添加另一个字段来计算请求   参观进一步的查询。我想我需要一个带有tourid的选择   1。

SELECT R.tourid, COUNT(R.tourid)
FROM Requests R
GROUP BY R.tourid;

添加字段以跟踪汇总信息会使事情变得更加复杂(需要例如触发器),并且原则上会过早优化。

  

3)Optimum将是一个包含if-else语句的查询   结果,如果游览的话,tourid后面的字段将为NULL   可用或显示最老员工的入职日期   如果请求人数> gt,请求参观。 0

SELECT T.tourid, RE.min_date_of_entry
FROM Tours T
LEFT OUTER JOIN (
    SELECT R.tourid, MIN(E.date_of_entry) AS min_date_of_entry
    FROM Requests R
    INNER JOIN Employees E ON E.employeeid = R.employeeid
    GROUP BY R.tourid
    ) RE ON RE.tourid = T.tourid;

在编写SQL时,您应该尽可能使用关联逻辑运算符(如连接)而不是条件数等命令式工具。在这种情况下,LEFT OUTER JOIN只会在NULLRE中没有匹配时从RE获取INNER JOIN个值。 ,如果没有匹配,将跳过行)。请注意,如果您计划使用最短入境日期来确定请求员工,则必须处理极端案件。例如,如果员工的入职日期相同,会发生什么?