2014-01-17 5 views
1

У меня есть таблица с именем ЧАСЫ он имеет столбцы ID:таблицы запросов и сравнить с другой строкой

NUMBER, TIME_IN: DATE, TIME_OUT: DATE, START_LUNCH: VARCHAR2, and STOP_LUNCH: VARCHAR2. 

Я хочу, чтобы выбрать идентификатор, где time_in и time_out является NOT NULL и START_LUNCH = «Y» и STOP_LUNCH является NULL, и этот идентификатор не имеет строки, где CLOCK_IN не является NULL, а CLOCK_OUT имеет значение NULL.

Я могу получить все, кроме последней части, где я хочу убедиться, что нет другой строки с тем же идентификатором, где CLOCK_IN не NULL, а CLOCK_OUT - NULL. Любая помощь приветствуется.

SELECT ID FROM CLOCK 
WHERE TIME_IN IS NOT NULL 
AND TIME_OUT IS NOT NULL 
AND START_LUNCH = '50' 
AND START_LUNCH IS NULL 

ответ

2

Вы можете использовать not exists или not in. Вот пример использование not in:

SELECT ID FROM CLOCK 
WHERE TIME_IN IS NOT NULL 
AND TIME_OUT IS NOT NULL 
AND START_LUNCH = '50' 
AND START_LUNCH IS NULL 
AND ID NOT IN (SELECT ID 
       FROM CLOCK 
       WHERE CLOCK_IN IS NOT NULL 
       AND CLOCK_OUT IS NULL) 

подзапрос снимает показания всех идентификаторов соответствия условий, которые вы хотите исключить, и not in берет на себя фактически исключив их.

0

Использование не существует:

SELECT a.id 
    FROM clock a 
WHERE a.time_in IS NOT NULL 
    AND a.time_out IS NOT NULL 
    AND a.start_lunch = '50' 
    AND a.start_lunch IS NULL 
    AND NOT EXISTS (SELECT 'X' 
        FROM clock b 
        WHERE b.clock_in IS NOT NULL 
         AND b.clock_out IS NULL 
         AND b.id = a.id); 
Смежные вопросы