Разница между двумя выборами в SQL - PullRequest
13 голосов
/ 05 октября 2011

У меня есть одна таблица данных:

--------------------
ID |  user | Value
--------------------
1  |  1    | 1
--------------------
2  |  1    | 2
--------------------
3  |  2    | 3
--------------------
4  |  2    | 2
--------------------
5  |  3    | 4
--------------------
6  |  3    | 2
--------------------

Я хотел бы ВЫБРАТЬ все строки, где значение отличается от пользователя 1, поэтому результатом будут строки с идентификаторами 3 (значение 3) и 5 ​​(значение 2)

Я бы сделал что-то вроде этого (назову это A)

SELECT * FROM table WHERE user = 1

и получите все строки от пользователя 1. Чем бы я выбрал (назову это B)

SELECT * FROM table WHERE user != 1

и получите все остальные строки. И чем бы я их сравнил WHERE A.value != B.value.

Я застрял на том, как объединить все вместе ...

Пожалуйста, помогите!

Ответы [ 3 ]

29 голосов
/ 05 октября 2011

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

SELECT * 
FROM table
WHERE value NOT IN ( SELECT value FROM table WHERE user = 1)
10 голосов
/ 05 октября 2011

Реляционный оператор действительно является «разницей», в Oracle есть ключевое слово MINUS, в стандартном SQL есть ключевое слово EXCEPT, например,

SELECT value 
  FROM table 
EXCEPT
SELECT value 
  FROM table 
 WHERE user = 1;

К сожалению, в MySQL такого оператора нет,Вы должны использовать другие конструкции SQL, например NOT IN <table expression>:

SELECT value 
  FROM table
 WHERE value NOT IN ( SELECT value
                        FROM table
                       WHERE user = 1 );
4 голосов
/ 05 октября 2011

select * from table where value not in (select value from table where user = 1);

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