Подтвердить что ты не робот

Разница между двумя выборами в SQL

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

--------------------
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.

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

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

4b9b3361

Ответ 1

Попробуйте следующее:

SELECT * 
FROM table
WHERE value NOT IN ( SELECT value FROM table WHERE user = 1)

Ответ 2

Реляционный оператор действительно является "разницей", у Oracle есть ключевое слово MINUS, Standard 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 );

Ответ 3

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