2014-01-17 29 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是ID NULL并且该ID没有一行,其中CLOCK_IN不是NULL并且CLOCK_OUT为空。

我可以得到它,但最后一部分,我想确保没有另一行具有相同的ID,其中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 existsnot 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) 

子查询挑选了所有的ID的匹配,你要排除的条件和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);