SQL ACCESS(需要关于查询的想法和帮助)

时间:2015-05-31 19:15:28

标签: sql

我是访问SQL的新手,我需要一些查询帮助。我想要的是找到那些喜欢prefer_to_buyprefer_to_rent的汽车(制造商和型号)而没有其他人喜欢的客户。

例如,如果2个顾客更喜欢丰田,则aygo不得在结果表中。

  

客户(CUSTOMER_ID,名称)

     

prefer_to_buy(CUSTOMER_ID,制造商,型号)

     

prefer_to_rent(customer_id,制造商,型号)

我尝试了很多方法,包括存在,我知道必须有大约2-3个子查询,但我不能让它工作,任何想法?

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_buyprefer_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)