Как исключить записи с определенными значениями в sql select
как я могу выбрать только магазины, у которых нет клиента 5
?
StoreId ClientId
------- ---------
1 4
1 5
2 5
2 6
2 7
3 8
Я пытаюсь что-то вроде этого:
SELECT SC.StoreId FROM StoreClients
INNER JOIN StoreClients SC
ON StoreClients.StoreId = SC.StoreId
WHERE SC.ClientId = 5
GROUP BY StoreClients.StoreId
кажется, это дает мне все магазины, у которых есть этот клиент, но я не могу сделать наоборот, потому что если я это сделаю <> 5
Я все равно получу магазин 1
и 2
чего я не хочу.
Я в основном пытаюсь использовать этот результат в другом запросе EXISTS IN
п.
6 ответов
в одну сторону:
SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
SELECT * FROM StoreClients sc2
WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
SELECT SC.StoreId
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)
таким образом ни JOIN
, ни GROUP BY
необходимо.
SELECT DISTINCT a.StoreID
FROM tableName a
LEFT JOIN tableName b
ON a.StoreID = b.StoreID AND b.ClientID = 5
WHERE b.StoreID IS NULL
выход
╔═════════╗
║ STOREID ║
╠═════════╣
║ 3 ║
╚═════════╝
SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
SELECT StoreId
FROM StoreClients
Where ClientId=5
)
можно использовать EXCEPT
синтаксис, например:
SELECT var FROM table1
EXCEPT
SELECT var FROM table2
<> will surely give you all values not equal to 5.
если у вас есть более одной записи в таблице, она даст вам все, кроме 5. если, с другой стороны, у вас есть только один, вы обязательно его получите. Дайте схему таблицы, чтобы можно было помочь вам правильно