Запрос SQL выберите *, если <this>, но не, если <condition> - PullRequest
1 голос
/ 21 марта 2012

У меня есть таблица, в которой хранятся имена сотрудников и годы их работы.Столбцы:

employeeID int NOT NULL,
year int NOT NULL

Первичный ключ является составным: employeeID и year.Мне нужно выбрать все записи в таблице, где существует 2012 год для этого employeeID, но НЕ 2011 года. Другими словами, мне нужен список сотрудников, которые работали в 2012 году, но НЕ в 2011 году. Я не знаю, почему яне могу этого сделать!Если вы понимаете вопрос, пропустите приведенный ниже код Java.

Если бы я проанализировал Таблицу сотрудников в Java, это было бы:

// This is what is returned at the end
List theQueryResults = new List();

// This would be all employees and the years they worked, assume it's filled.
Table employees = new Table (int employeeID, int year); 

for (int i = 0; i < employees.count(); i++) {
    boolean addToQuery = false;
    for (int j = 0; j < employees[0].length; j++) {
        if ( theArray[i][j] == 2011) {
            addToQuery = false;
            break;
        }
        if ( theArray[i][j] == 2012) { addToQuery = true; }
    }

    if (addToQuery == true) { theQueryResults.add(employees[i].id); }
}

Я был бы признателен за ответ.У меня мозговой перманент.

Ответы [ 3 ]

4 голосов
/ 21 марта 2012
SELECT employeeID 
FROM tab
WHERE year = 2012
and employeeID not in (SELECT employeeID FROM tab WHERE year = 2011)
2 голосов
/ 21 марта 2012

В Oracle вы можете использовать оператор МИНУС

select employeeId from tab
where year = 2012
minus
select employeeId from tab
where year = 2011
0 голосов
/ 21 марта 2012
select employeeID, year
from table
where employeeID not in (select employeeID from table where year = 2011)
and year = 2012

Для MSSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...