Ответ 1
Попробуйте следующее:
SELECT *
FROM table
WHERE value NOT IN ( SELECT value FROM table WHERE user = 1)
У меня есть одна таблица данных:
--------------------
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
.
Я зациклился на том, как объединить все вместе...
Пожалуйста, помогите!
Попробуйте следующее:
SELECT *
FROM table
WHERE value NOT IN ( SELECT value FROM table WHERE user = 1)
Реляционный оператор действительно является "разницей", у 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 );
select * from table where value not in (select value from table where user = 1);