#sql #sql-server #database #sql-server-2008
#sql #sql-сервер #База данных #sql-server-2008
Вопрос:
таблица классов
- переменная class_code(50)
- параметр синхронизации (50)
- параметр emp_id(50)
таблица employee
- i_id int
- параметр emp_id(20)
-
имя переменной(50)
- У нас есть 2 таблицы, 1 из которых — employee, а другая — class
- у нас есть 4 записи в таблице employee, где emp_id =как-1, как-2, как-3, как-4
- у нас есть 2 записи в class table с emp_id = как-1 или как-3 и timing = ‘3-4’
Мы выбираем те записи из таблицы employee, которые доступны / свободны при timing = ‘3-4’, например, как-2 или как-3, потому что as-1 или as-3 уже находятся в таблице классов при timing в 3-4
Комментарии:
1. Какая СУБД у вас mysql или SQL-Server. Пожалуйста, удалите неправильные теги!
2. почему emp_id имеет значение varchar (20) в одной таблице, но varchar(50) в другой
3. я использую SQL SERVER 2008 и emp_id varchar (20) для обеих таблиц
4. у нас есть 3 сотрудника, и их emp_id равен e-1, e-2, e-3 в таблице employee хорошо, теперь e-1, e-2 обрабатываются в 3-4, а e-3 свободны, их запись в таблице class теперь мы выбираем запись сотрудника с условием, где timing = 3-4, но я хочу, чтобы запись, которая свободна в 3-4, была похожа на e-3
Ответ №1:
Вы многого нам не рассказали, и указанные данные могут быть не совсем репрезентативными. Оба они вернут employee 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
)
;
смотрите этот sqlfiddle (MySQL)
Комментарии:
1. Пример: у нас есть 3 сотрудника, и их emp_id равен e-1, e-2, e-3 в таблице employee хорошо, теперь e-1, e-2 обрабатываются в 3-4, а e-3 свободны, их запись в таблице class теперь мы выбираем запись employee с условием, где timing = 3-4, но я хочу, чтобы запись, которая свободна в 3-4, была похожа на e-3