问题描述
我怎样才能做到这一点?
SELECT a.city
FROM Address a
WHERE a.city NOT LIKE ANY '(
SELECT a2.city FROM Address a2 WHERE a2.id = ANY (
SELECT ca.customerAddresspK.addressId FROM CustomerAddress ca WHERE ca.customerAddresspK.customerId = ANY(
SELECT c.id FROM Customer c WHERE c.firstName = 'niko')))'
所以我想得到一个城市列表,这些城市与有 niko 地址的城市不同。地址实体和客户实体是多对多的关系。
解决方法
所以我想得到一个城市列表,这些城市与有 niko 地址的城市不同。
您可以为此查询使用聚合:
SELECT a.city
FROM Address a join
CustomerAddress ca
on ca.addressId = a.id join
Customer c
on ca.customerId = c.id
GROUP BY a.city
HAVING SUM(CASE WHEN c.firstName = 'niko' THEN 1 ELSE 0 END) = 0;
注意:这里假设所有地址都有一个城市。这似乎也是您尝试的假设。