Как исключить записи с определенными значениями в 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, я все равно получу Store 1 и 2, которые мне не нужны.

Я в основном пытаюсь использовать этот результат в предложении EXISTS IN другого запроса.


person MisterIsaak    schedule 13.03.2013    source источник


Ответы (6)


В одну сторону:

SELECT DISTINCT sc.StoreId
FROM StoreClients sc
WHERE NOT EXISTS(
    SELECT * FROM StoreClients sc2 
    WHERE sc2.StoreId = sc.StoreId AND sc2.ClientId = 5)
person AdaTheDev    schedule 13.03.2013

SELECT SC.StoreId 
FROM StoreClients SC
WHERE SC.StoreId NOT IN (SELECT StoreId FROM StoreClients WHERE ClientId = 5)

Таким образом, ни JOIN, ни GROUP BY не нужны.

person MarcinJuraszek    schedule 13.03.2013

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 ║
╚═════════╝
person John Woo    schedule 13.03.2013

SELECT StoreId
FROM StoreClients
WHERE StoreId NOT IN (
  SELECT StoreId
  FROM StoreClients
  Where ClientId=5
)

скрипт SQL

person squillman    schedule 13.03.2013

Вы можете использовать EXCEPT синтаксис, например:

SELECT var FROM table1
EXCEPT
SELECT var FROM table2
person lozsui    schedule 08.11.2016
comment
В примере недостаточно значения. Ответ был бы лучше с фактическим утверждением, решающим исходный вопрос. -1 - person Jim Lahman; 08.11.2019

<> обязательно даст вам все значения, не равные 5. Если у вас есть более одной записи в таблице, она даст вам все, кроме 5. С другой стороны, если у вас есть только одна, вы обязательно получите одну. Дайте схему таблицы, чтобы вам могли правильно помочь

person kombo    schedule 13.03.2013