2015-02-25 4 views
-1

[Пользователи]Выберите пользователей, связанные с Approved списка/таблицы с помощью Ms Acces 2003/2013 или Sql запрос

ID | UserID | City | Phone 
----+-----------+-----------+---------- 
1 | John | Rome | 12345 
2 | Tom  | Oslo | 12345 
3 | Simon | Bogota | 12345 
4 | Kurt | Tokyo | 12345 

[Заказы]

ID | UserID | OrderNr | OrderName 
------------------------------------------------ 
1 | John | 1  | Apple 
2 | John | 2  | Carrots 
3 | John | 3  | Banana 
4 | Tom  | 3  | Banana 
5 | Tom  | 1  | Apple 
6 | Tom  | 8  | Raisins 
7 | Simon | 3  | Banana 
8 | Simon | 1  | Apple 
9 | Kurt | 7  | Cucumber 

Список разрешенных

1 (Apple) 
3 (Banana) 
4 (Another order) 
8 (Raisins) 

Теперь я хотел бы выбрать всех пользователей, чьи заказы содержат/соответствуют моему утвержденному списку.

В этом случае Иоанна следует исключить, поскольку он заказал Морковь, у которой есть OrderNr 2, который не входит в мой утвержденный список.

+3

И когда на картинке появляется MySQL? – jarlh

+0

Переименовать столбец пользователей UserID в UserName. В таблице «Заказы» сохраните идентификатор из таблицы «Пользователи» вместо «Имя пользователя». Не указывайте ID и OrderNr в таблице Заказы и не допускайте дубликатов. Добавьте еще одну таблицу, OrderItems, где перечислены различные элементы заказа. – jarlh

ответ

0

Если вы хотите, чтобы пользователи, которые только имеют заказы в утвержденный список, я хотел бы предложить условную агрегацию и пункт having:

select o.userid 
from orders as o 
group by o.userid 
having sum(iif(o.OrderNr not in (1, 3, 4, 8), 1, 0)) = 0; 

Предложение having отфильтровывает пользователей, которые имеют «недопустимый» продукт.