Further to Paul's suggestion re 2 queries, I mocked up 4 tables (minimal data)
First query to show which Products "Bob" has ordered
Code:
SELECT WineCustomer.CustId, WineCustomer.CustName, WineCustOrders.Orderid, WineProducts.pRODnAME
FROM WineProducts INNER JOIN ((WineCustomer INNER JOIN WineCustOrders ON WineCustomer.CustId = WineCustOrders.CustId) INNER JOIN WINEORDERDETAILS ON WineCustOrders.Orderid = WINEORDERDETAILS.Orderid) ON WineProducts.pRODID = WINEORDERDETAILS.PRODId
WHERE (((WineCustomer.CustName)="Bob"))
ORDER BY WineCustomer.CustName, WineCustOrders.Orderid;
Then to find the Products that Bob hasn't yet ordered,
as Paul suggested, take all the Products and remove the one's that Bob has already ordered.
Code:
SELECT WineProducts.pRODnAME as ProductsNotYetOrderedByBOB
FROM WineProducts
WHERE
WineProducts.ProdName Not In
(select prodName from
(
SELECT WineCustomer.CustId, WineCustomer.CustName, WineCustOrders.Orderid, WineProducts.pRODnAME
FROM WineProducts INNER JOIN ((WineCustomer INNER JOIN WineCustOrders ON WineCustomer.CustId = WineCustOrders.CustId) INNER JOIN WINEORDERDETAILS ON WineCustOrders.Orderid = WINEORDERDETAILS.Orderid) ON WineProducts.pRODID = WINEORDERDETAILS.PRODId
WHERE (WineCustomer.CustName)="Bob"
)
)
I didn't add all of the fields you mentioned, but I hope there is sufficient info to show the approach.
You can use this as a guide and substitute your own fields and tables.
Good luck.