[英]SQL ACCESS (need ideas and help about a query)
我是Access SQL的新手,我需要一些查询的帮助。 我想要的是从prefer_to_buy
和prefer_to_rent
中找到那些更喜欢汽车(制造商和模型)的客户,而其他人都没有。
例如,如果2位顾客更喜欢Toyota Aygo,则必须不在结果表中。
客户(customer_id,姓名)
preferred_to_buy(客户ID,制造商,型号)
preferred_to_rent(客户ID,制造商,型号)
我尝试了很多方式,包括存在,我知道大约必须有2-3个子查询,但是我无法使其正常工作,有什么想法吗?
您的问题定义非常模糊,因此答案也很笼统。 您应该尝试在customer
表上创建一个左外部联接,例如,使用customer_id
作为prefer_to_buy
字段来创建一个“ prefer_to_buy
”表,并包括: customer_id,name
左表中的customer_id,name
, manufacturer,model
右表中的manufacturer,model
。 相同的逻辑适用于prefer_to_rent
表:您实际上可以使用上述外部联接将这3个表组合到单个Access SQL查询中。
希望这会有所帮助。 最好的问候,在这里输入代码
这里有两个部分。 首先,您可以使用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)
首先,您需要对两个联接执行一个,对joint_to_buy进行一次联接,对joint_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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.