2015-04-29 4 views
0

Я борюсь с оператором SQL, который я пытаюсь написать в MS Access, и был бы признателен за любую помощь.SQL на основе сложных критериев

У меня есть таблица:

*************************** 
* attr1 * attr2 * attr3 * 
*************************** 
*  * A * 1  * 
*  * B * 2  * 
*  * B * 3  * 
*  * C * 4  * 
* B *  * 1  * 
* D *  * 1  * 
* A *  * 2  * 
*************************** 

Мне нужно привести, как это:

*************************** 
* attr1 * attr2 * attr3 * 
*************************** 
* B *  * 1  * 
* D *  * 1  * 
* A *  * 2  * 
*  * B * 3  * 
*  * C * 4  * 
*************************** 

Так что, мне нужно в моем результате все строки, где attr1 не является нулевым, а все остальные строки, в которых attr3 имеет разные значения от значений в строках, где attr1 не является нулевым.

Я могу сделать это в Access, чтобы сделать один запрос, когда я выбираю все строки, где attr1 не является нулевым, чем один «найти непревзойденный» запрос, где я выбираю все строки со значениями в attr3, которые не включены в первый запрос, а затем объединить эти два запроса ... но мне нужен более прямой подход (по возможности, один SQL-оператор).

спасибо!

ответ

2

Я думаю, что вы, вероятно, нужно что-то вроде этого:

Select attr1, attr2, attr3 
from table 
where attr1 is not null 
     or attr3 not in (select attr3 from table where attr1 is not null) 
+0

большое спасибо. Это оно! – Mario

+0

Без проблем, я мог бы помочь :) –

+1

Из любопытства вы видите какую-либо разницу в производительности с помощью «НЕ СУЩЕСТВУЕТ»? ... 'SELECT y1.attr1, y1.attr2, y1.attr3 FROM YourTable AS y1 WHERE y1.attr1 НЕ НУЖНО ИЛИ НЕ СУЩЕСТВУЕТ (ВЫБРАТЬ 1 ОТ ТИПОВОГО AS y2 WHERE y2.attr3 = y1.attr3 И y2.attr1 IS NOT Null) ' – HansUp

Смежные вопросы