MySQL:在三个表中选择

标签 mysql if-statement

我正在开发一个系统,一些 express 员可能会要求他们的首选旅行。如果有不止一名员工要求特定的旅行,我想把它交给第一个开始为我们工作的人。我想像这样在概览页面上显示笑脸或其他内容

  1. 可以参观
  2. 你会把某人踢出去
  3. 已由第一个开始的人请求

我试了好几个小时,但我无法得到它的 MySQL 代码。 我有 3 个相关表。

  1. 员工:
    • 员工编号
    • 入境日期
    • ...
  2. 游览
    • 旅游
    • 细节...
  3. 要求
    • 员工编号
    • 旅游

我想选择所有旅游,包括他们的详细信息 -> 简单

我想(至少)添加另一个字段来计算该游览的请求,以便进一步查询。我想我需要从 1. 查询中使用 tourid 进行选择

最好是一个包含 if-else 语句和结果的查询,如果旅游可用或显示最老员工的进入日期,则 tourid 后面的字段将为 NULL如果请求数 > 0,谁请求了游览

我非常感谢您对此提出的任何建议!

谢谢!

最佳答案

2)I want to (at least) add another field counting the requests on that tour for further queries. I guess I need a select with the tourid from the 1.

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

添加一个字段来跟踪聚合信息会使事情变得更加复杂(例如需要触发器),并且原则上会是过早的优化。

3) Optimum would be a query including an if-else statement with the result, that the field behind the tourid would be NULL if the tour is available or showing the date of entry of the oldest employee who requested the tour if the requestcount > 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 时,您应该尽可能使用关系逻辑运算符(例如联接)而不是命令式工具(例如条件语句)。在这种情况下,只要 RE< 中没有匹配项,LEFT OUTER JOIN 就会在 RE 中的任何列中产生 NULL(INNER JOIN,另一方面,如果没有匹配,将跳过行)。请注意,如果您计划使用最短进入日期来确定提出请求的员工,您将不得不处理极端情况。例如,如果有员工的入职日期相同,应该怎么办?

关于MySQL:在三个表中选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23160128/

相关文章:

variables - SASS 忽略在 if 语句中定义的变量

python - 如何从文件中打印特定行

PHP Laravel 5 elseif 未按预期运行

php - 如果我想保存来自使用 PHP 和 MySQL 的用户的文件,我应该使用什么数据类型?

java - 从数据库查询重新格式化 json

java if 条件 == false vs !运算符(operator)

python - 嵌套 if ... else(Python 练习)

mysql - 使用mysql中的触发器生成字母数字员工ID?

mysql - 删除MYSQL表中多个字段的SQL语句

php - php中如何区分选择查询和非选择查询