【问题标题】:Find Unmatch record 2 table with where condition apply and record show from 1 table查找不匹配的记录 2 表,其中条件适用并从 1 表中显示记录
【发布时间】:2014-07-08 20:32:29
【问题描述】:

类表

  • class_code varchar(50)
  • 定时 varchar(50)
  • emp_id varchar(50)

员工表

  • i_id int
  • emp_id varchar(20)
  • 名称 varchar(50)

    1. 我们有 2 张桌子,一张是员工,另一张是班级
    2. 员工表中有 4 条记录,其中 emp_id=as-1,as-2,as-3,as-4
    3. 我们在类表中有 2 条记录,emp_id = as-1 或 as-3 且时间 = '3-4'

我们从员工表中选择那些在时间='3-4' 可用/空闲的记录,例如 as-2 或 as-3,因为 as-1 或 as-3 已经在 3-4 时间的班级表中

【问题讨论】:

  • 您拥有 mysql 或 SQL-Server 的 DBMS。请删除错误的标签!
  • 为什么 emp_id 在一个表中为 varchar(20) 而在另一个表中为 varchar(50)
  • 我在两个表上都使用 SQL SERVER 2008 和 emp_id varchar(20)
  • 我们有 3 名员工,他们的 emp_id 是员工表上的 e-1,e-2,e-3 好的,现在 e-1,e-2 在 3-4 和 e-3 中工作在班级表中释放他们的记录现在我们选择条件为时间 = 3-4 的员工记录,但我想要像 e-3 一样在 3-4 释放的记录

标签: sql sql-server database sql-server-2008


【解决方案1】:

您没有告诉我们很多信息,并且指示的数据可能不完全具有代表性。这两个都将返回员工 2 和 4(并且都将在 MySQL 或 MSsql 中工作):

SELECT
      e.*
FROM employee e
      LEFT JOIN class c
            ON e.emp_id = c.emp_id
WHERE (c.timing <> '3-4'
      OR c.timing IS NULL)
;

SELECT
      *
FROM employee
WHERE NOT EXISTS (
            SELECT 1
            FROM class
            WHERE timing = '3-4'
                  AND class.emp_id = employee.emp_id
      )
;

参见this sqlfiddle (MySQL)

【讨论】:

  • 示例:我们有 3 名员工,他们的 emp_id 是员工表上的 e-1,e-2,e-3 现在 e-1,e-2 在 3-4 和 e 中工作-3 在班级表中释放他们的记录,现在我们选择条件为 time=3-4 的员工记录,但我想要像 e-3 一样在 3-4 释放的记录
猜你喜欢
  • 1970-01-01
  • 2017-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
相关资源
最近更新 更多