gpt4 book ai didi

mysql - 创建联接以显示 T1 中不在 T2 中的一列的值,并进行一些比较

转载 作者:行者123 更新时间:2023-11-29 19:07:53 24 4
gpt4 key购买 nike

我正在尝试在 MYSQL 存储过程中创建联接,一个表是 EMployeeMaster,另一个表是 WeekRest。

我的加入应该只为那些在某些条件下第二个表 WeekRest 中不存在的 EMPID 生成来自 EmpMaster 的 EMPID 值。我无法获得预期的结果。

附加表结构,其中仅包含必要的列以及我创建的表和连接的示例值。

  1. 为第一个表创建语句hrmempmaster

        CREATE TABLE `hrmempmaster` (
    `ID` int(11) NOT NULL AUTO_INCREMENT,
    `EMPID` varchar(45) NOT NULL,
    `Department` varchar(45) DEFAULT NULL,
    `Designation` varchar(45) DEFAULT NULL,
    `ShiftName` varchar(45) DEFAULT NULL,
    `ShiftID` varchar(45) DEFAULT NULL,
    `ReportingTo` varchar(45) DEFAULT NULL,
    `UnitCode` varchar(45) DEFAULT NULL,
    `UnitName` varchar(45) DEFAULT NULL,
    `DivisionName` varchar(45) DEFAULT NULL,
    `DivisionCode` varchar(45) DEFAULT NULL,
    `Name` varchar(50) DEFAULT NULL,
    `Gender` varchar(50) DEFAULT NULL,
    `DOB` varchar(50) DEFAULT NULL,
    `DOJ` varchar(50) DEFAULT NULL,
    `FatherName` varchar(45) DEFAULT NULL,
    PRIMARY KEY (`ID`),
    UNIQUE KEY `EMPID_UNIQUE` (`EMPID`),
    UNIQUE KEY `ID_UNIQUE` (`ID`)
    ) ENGINE=InnoDB AUTO_INCREMENT=428 DEFAULT CHARSET=utf8;
  2. 为第二个表WeekRest创建语句

    CREATE TABLE `hrmweekrest` (
    `ID` int(11) DEFAULT '1',
    `EmpID` varchar(45) NOT NULL,
    `EmpName` varchar(45) DEFAULT NULL,
    `FatherName` varchar(45) DEFAULT NULL,
    `Department` varchar(45) DEFAULT NULL,
    `Designation` varchar(45) DEFAULT NULL,
    `WeekRestOn` varchar(45) DEFAULT NULL,
    `Month` varchar(45) NOT NULL,
    `Year` varchar(45) NOT NULL,
    `Status` varchar(45) DEFAULT NULL,
    `MonthYear` varchar(45) DEFAULT NULL,
    PRIMARY KEY (`EmpID`,`Month`,`Year`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  3. 我的程序没有给出预期值

    CREATE DEFINER=`root`@`localhost` PROCEDURE `HRFetchWeekRest`(IN Department VARCHAR(25), IN MonthYear varchar (15))
    begin

    select hrmempmaster.empid, hrmempmaster.Name,hrmempmaster.FatherName, hrmempmaster.Department,hrmempmaster.Designation, HRMWEEKREST.WeekRestOn FROM HRMEMPMASTER

    LEFT JOIN HRMWEEKREST ON HRMEMPMASTER.EMPID = HRMWEEKREST.EMPID

    where hrmempmaster.empid not in (select empid from HRMWEEKREST where HRMWEEKREST.MonthYear = MonthYear ) and hrmempmaster.department = Department;

    end
  4. 示例

如果 EmployeeMaster 表有 1 名员工,其 EMPID ID1、ID2、ID3...,并且我将部门作为所有员工的 Dept1 传递,并且 WeekRest 表的列中包含以下值

    # ID, EmpID, EmpName, FatherName, Department, Designation, WeekRestOn, Month, Year, Status, MonthYear
1, ID1, Name1, Fname1, Dept1, Designation1, Sunday, January, 2017, Active, January2017

然后当

i) 部门传递为“Dept1”,月份传递为“February2017”select 语句应返回所有 EMPID,因为没有一个在 Weekrest 表中具有值。将二月视为一年中除一月之外的任何其他月份

ii) Department 传递为“Dept1”,MonthYear 传递为“January2017”select 语句应返回除 ID1 之外的所有 EMPID,因为除了 ID1 之外,所有 ID 在 Weekrest 表中都没有值。

将尽力尽早提供任何进一步的信息

最佳答案

试试这个

 CREATE DEFINER=`root`@`localhost` PROCEDURE `HRFetchWeekRest`(IN Department VARCHAR(25), IN MonthYear varchar (15))
begin

select hrmempmaster.empid, hrmempmaster.Name,hrmempmaster.FatherName, hrmempmaster.Department,hrmempmaster.Designation, HRMWEEKREST.WeekRestOn FROM HRMEMPMASTER

LEFT JOIN HRMWEEKREST ON HRMEMPMASTER.EMPID = HRMWEEKREST.EMPID AND HRMWEEKREST.MonthYear = MonthYear

where HRMWEEKREST.empid IS NULL and hrmempmaster.department = Department;

end

关于mysql - 创建联接以显示 T1 中不在 T2 中的一列的值,并进行一些比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43343423/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com