我是访问SQL的新手,我需要一些查询帮助。我想要的是找到那些喜欢prefer_to_buy
和prefer_to_rent
的汽车(制造商和型号)而没有其他人喜欢的客户。
例如,如果2个顾客更喜欢丰田,则aygo不得在结果表中。
客户(CUSTOMER_ID,名称)
prefer_to_buy(CUSTOMER_ID,制造商,型号)
prefer_to_rent(customer_id,制造商,型号)
我尝试了很多方法,包括存在,我知道必须有大约2-3个子查询,但我不能让它工作,任何想法?
答案 0 :(得分:0)
您的问题定义非常模糊,因此答案也是一般的。您应该尝试在customer
表上创建一个Left Outer Join,例如,使用prefer_to_buy
作为连接字段的“customer_id
”表,并包括:
左表中为customer_id,name
,右表为manufacturer,model
。相同的逻辑适用于prefer_to_rent
表:您实际上可以使用上述外部联接在单个Access SQL查询中组合这3个表。
希望这可能会有所帮助。最好的问候,在这里输入代码
答案 1 :(得分:0)
这里有几个部分要介绍。首先,您可以使用union
运算符将prefer_to_buy
和prefer_to_rent
视为单个表(可能还有一个额外的文字"列"表示首选项类型)。完成此操作后,您可以使用exists
运算符确保没有其他客户更喜欢这款车:
SELECT c.name, p.manufacturer, p.model
FROM customer c
JOIN (SELECT customer_id, manufacturer, model
FROM prefer_to_buy
UNION
SELECT customer_id, manufacturer, model
FROM prefer_to_buy) p ON c.customer_id = p.customer_id
WHERE NOT EXISTS (SELECT *
FROM prefer_to_buy pb
WHERE c.customer_id != pb.customer_id AND
p.manufacturer = pb.manufacturer AND
p.model = pb.model) AND
NOT EXISTS (SELECT *
FROM prefer_to_rent pr
WHERE c.customer_id != pr.customer_id AND
p.manufacturer = pr.manufacturer AND
p.model = pr.model)
答案 2 :(得分:0)
首先,您需要在prefer_to_buy上执行两个联接,在prefer_to_rent上执行一个联接。 接下来,您需要检查是否有其他人想要相同的制造商和型号。使用存在
执行此操作SELECT *
FROM customer AS c
JOIN prefer_to_buy AS pb ON c.customer_id = pb.customer_id
JOIN prefer_rent AS pr ON c.customer_id = pr.customer_id
WHERE NOT EXISTS ( SELECT 'x' FROM prefer_to_buy AS pb1 WHERE pb.manufacturer = pb1.manufacturer AND pb.model = pb1.model AND pb.customer_id <> pb1.customer_id)
AND NOT EXISTS ( SELECT 'x' FROM prefer_to_rent AS pr1 WHERE pb.manufacturer = pr1.manufacturer AND pb.model = pr1.model AND pb.customer_id <> pr1.customer_id)