SQL NOT LIKE 与子查询

Posted

技术标签:

【中文标题】SQL NOT LIKE 与子查询【英文标题】:SQL NOT LIKE with subquery 【发布时间】:2021-04-12 08:00:12 【问题描述】:

我怎样才能做到这一点?

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 地址的城市不同的城市列表。地址实体和客户实体具有多对多关系。

我可以在哪里运行此查询?

【问题讨论】:

样本数据和预期结果将帮助我们在这里为您提供帮助。当然,你所拥有的东西是行不通的;它不是有效的 T-SQL。还有,这个问题和jpql有什么关系? ca.customerAddressPK.customerId 是无效的有效列引用。这只是为什么最好发布一个其他人可以运行的脚本来理解您的问题的原因之一。也许您假设只有一个客户的名字 = 'niko' - 这安全吗?可能不是,但正确的代码取决于您的架构和您的实际目标。 【参考方案1】:

所以我想获取一个与具有 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;

注意:这假设所有地址都有一个城市。这似乎也是您尝试的假设。

【讨论】:

以上是关于SQL NOT LIKE 与子查询的主要内容,如果未能解决你的问题,请参考以下文章

sql [sql技巧]一些sql技巧#sql

sql 2008 r2 在sql 2008上兼容么

pl sql developer怎么执行sql

pl sql developer怎么执行sql

什么是sql注入如何防止sql注入

sql SQL Server和Oracle SQL的SQL语法的一些示例