2013-03-27 4 views
1

Выполнение этого запроса,Выбор уникальных записей из базы данных

select * from table; 

Возвращает следующий

|branch | number | 
------------------- 
| 1 | 123 | 
| 1 | 001 | 
| 2 | 123 | 
| 3 | 123 | 
| 4 | 123 | 
| 1 | 123 | 
| 1 | 789 | 
| 2 | 123 | 
| 3 | 123 | 
| 4 | 009 | 

Я хочу, чтобы найти значения, которые являются уникальными для ONLY ветви 1

| 1 | 001 | 
| 1 | 789 | 

Может ли это выполняются без сохранения данных в отдельных таблицах? Я пробовал несколько «выбрать разные» запросы &, похоже, не получил ожидаемых результатов.

ответ

1

Я предполагаю, что я пытаюсь сказать, что я хочу найти все числа, которые уникальны для ONLY ветви 1. Если они найдены в любой другой ветке, я не хочу их видеть.

Я думаю, это то, что вы хотите.

SELECT distinct number 
FROM MyTable 
WHERE branch=1 and number not in 
(SELECT distinct number 
FROM MyTable 
WHERE branch != 1) 
+0

Большое спасибо! Это похоже на то, что мне нужно. – webhead74

0

Попробуйте это:

SELECT branch, number 
FROM table 
GROUP BY branch, number 

Вот SQLFiddle для вас, чтобы посмотреть на

Если вы хотите ограничить его только ветви 1, то просто добавьте где положение.

SELECT branch, number 
FROM table 
WHERE branch = 1 
GROUP BY branch, number 
2
SELECT branch, number 
FROM table 
WHERE branch = 1 
GROUP BY branch, number 
2

Если вам не нужны какие-либо агрегаты, вы можете использовать distinct вместо group by:

select distinct branch 
,  number 
from YourTable 
where branch = 1 
+0

Спасибо, но это не совсем то, что я ищу. Запуск этого запроса вернет значения столбца «число», которые могут быть найдены в других ветвях. Я предполагаю, что я пытаюсь сказать, что хочу найти все числа, которые уникальны для ТОЛЬКО ветви 1. Если они найдены в любой другой ветке, я не хочу их видеть. – webhead74

0

Чтобы выбрать все значения, которые являются уникальными в колонке number и имеет branch значения 1, вы можете использовать следующий код:

SELECT branch, number 
FROM table1 
WHERE number IN (
SELECT number 
FROM table1 
GROUP BY number 
HAVING (COUNT(number) = 1) 
) 
AND branch = 1 

Для демонстрации см http://sqlfiddle.com/#!2/97145/62

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