2015-01-30 2 views
0

У меня есть 2 стола.Слева Присоединиться к запросу не работает

Table 1: 
ID  Name  Age  PhoneNumber 
12  Joe  25  873827382 
23  Bob  28  928398233 
34  Jane  23  237828883 


Table 2: 
ID  Agent  QuantitySold  
12  A1   100 
23  B1   300 
12  C1   600 
34  A2   400 
34  B1   800 
23  B2   900 

Я хочу, чтобы показать все детали сотрудников, которые никогда не продаются в количестве не равное 800.

SELECT a.ID, a.Name, a.Age, a.PhoneNumber 
FROM table1 a LEFT JOIN table2 b 
ON a.ID= b.ID AND b.quantity <> 800 

Я хочу, чтобы результирующий набор, который не имеет идентификатор 34 в нем. Но я не могу этого достичь. Любая помощь?

ответ

0

Это то, что в конечном итоге сработало.

SELECT a.ID 
    , a.Name 
    , a.Age 
    , a.PhoneNumber 
FROM table1 a 
WHERE a.ID NOT IN (SELECT ID FROM table2 QuantitySold = 800); 
1

Вы можете использовать NOT EXISTS без какой-либо из JOIN с:

SELECT a.ID 
    , a.Name 
    , a.Age 
    , a.PhoneNumber 
FROM table1 a 
WHERE NOT EXISTS (SELECT * FROM table2 WHERE ID = a.ID AND QuantitySold = 800) 

Кстати, имя столбца QuantitySold, не quantity.

JSFiddle

+0

EDIT: ОК с обновлением ^^ –

+0

Лучше не публиковать ответ, который уже присутствует. Храните SO 'clean'. 'Exists'to' Not exist' здесь не является большим изменением. –

+0

@ NoDisplayName: Я тоже не большой поклонник такого поведения, и я, вероятно, удалю свой ответ в любой другой ситуации, но, как вы можете видеть, я собирался скрипка, когда вы отправляли ответ, поэтому потребовалось некоторое время, чтобы отредактировать мой вопрос: _no offense_. – potashin

0

Почему вы используете Соединение слева. Используйте внутреннее соединение. Что-то вроде этого: -

SELECT a.ID, a.Name, a.Age, a.PhoneNumber, SUM(b.quantity) 
FROM table1 a JOIN table2 b 
ON a.ID= b.ID 
GROUP BY b.Agent 
HAVING SUM(b.quantity) <> 800 
+0

Это тоже не сработало. –

+0

Теперь попробуйте мое редактирование. –

1

Вы должны изменить ваш Left Join в Inner Join.

Left Join принесет все ряды от table1, хотя он никогда не делал sales. Я сделаю это, используя Exists.

SELECT a.ID, 
     a.Name, 
     a.Age, 
     a.PhoneNumber 
FROM table1 a 
WHERE EXISTS (SELECT 1 
       FROM table2 b 
       WHERE a.ID = b.ID 
         AND b.quantity <> 800) 
+0

Это не сработало. У меня все еще есть запись с ID 34 в моем результирующем наборе –

Смежные вопросы