【发布时间】:2015-04-20 10:11:41
【问题描述】:
我有一个如下所示的 SQL 查询:
DELETE
price.*
FROM
price
JOIN
service
ON
price.service_id = service.id
WHERE
price.country_from_id NOT IN
(SELECT
country_id
FROM
carrier_zone_country
JOIN
carrier_zone
ON
carrier_zone_id = carrier_zone.id
WHERE
carrier_zone.carrier_service_id = service.carrier_service_id)
OR
price.country_to_id NOT IN
(SELECT
country_id
FROM
carrier_zone_country
JOIN
carrier_zone
ON
carrier_zone_id = carrier_zone.id
WHERE
carrier_zone.carrier_service_id = service.carrier_service_id)
我希望通过将子查询移动到FROM 子句并为其命名来避免运行两次子查询。但是,这给了我语法错误。查看文档,我可以看到只有SELECT FROM 子句可以在其中包含命名子查询。
首先我想知道为什么会这样?其次,我怎样才能重新编写这个 SQL 查询以避免重复执行相同的子查询。
【问题讨论】:
-
执行 NOT EXISTS,检查 price.country_from_id 和 price.country_to_id。
-
是mysql还是sqlserver?
-
@Deepshikha,你为什么怀疑 SQL Server?
-
@jarlh 你能解释一下如何使用
NOT EXISTS吗?
标签: mysql sql select subquery sql-delete