SELECT `id`, `name` FROM `pms_assess` WHERE `parent_id` = ( SELECT catalog_id FROM `pms_product` WHERE `id` = 1663780757367164929 );如果没有结果则返回`parent_id` = 0的结果
时间: 2023-07-13 18:21:40 浏览: 76
你可以使用SQL的UNION语句来实现这个需求,具体的SQL语句如下:
```
SELECT `id`, `name` FROM `pms_assess` WHERE `parent_id` = (
SELECT catalog_id FROM `pms_product` WHERE `id` = 1663780757367164929
)
UNION
SELECT `id`, `name` FROM `pms_assess` WHERE `parent_id` = 0 AND NOT EXISTS (
SELECT `id` FROM `pms_assess` WHERE `parent_id` = (
SELECT catalog_id FROM `pms_product` WHERE `id` = 1663780757367164929
)
);
```
这个SQL语句首先执行第一个SELECT语句,查询parent_id等于catalog_id的行,如果有结果则返回这些行。如果第一个SELECT语句没有结果,则执行第二个SELECT语句,查询parent_id等于0且不存在parent_id等于catalog_id的行的结果,最终将这两个结果合并起来返回。注意,这里使用了NOT EXISTS子查询来判断是否存在parent_id等于catalog_id的行。
希望这个回答能够解决你的问题。
相关问题
SELECT id, name FROM pms_assess WHERE parent_id = ( SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929 );如果没有结果则返回parent_id = 0的结果,使用CASE WHEN THEN实现
好的,你想要使用 CASE WHEN THEN 实现查询的需求,根据子查询的结果进行判断,如果有结果返回符合条件的结果,如果没有结果则返回 parent_id = 0 的结果。可以使用以下 SQL 语句实现:
```
SELECT id, name
FROM pms_assess
WHERE parent_id = (
SELECT
CASE
WHEN EXISTS (SELECT id FROM pms_assess WHERE parent_id = (SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929))
THEN (SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929)
ELSE 0
END
)
```
这个 SQL 语句会先执行子查询,查询符合条件的 catalog_id,如果存在则返回 catalog_id,否则返回 0。然后在外层查询中,根据返回的结果作为 parent_id 的条件进行查询,如果存在符合条件的结果则返回,否则返回 parent_id = 0 的结果。
希望这个回答能够解决你的问题。
SELECT id,name,parent_id FROM pms_assess WHERE parent_id = ( SELECT CASE WHEN EXISTS ( SELECT id FROM pms_assess WHERE parent_id = ( SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929 ) ) THEN ( SELECT catalog_id FROM pms_product WHERE id = 1663780757367164929 ) ELSE 0 END ) 优化这个SQL
可以考虑以下几种优化方案:
1. 使用 JOIN 替换子查询:可以使用 INNER JOIN 把 `pms_assess` 和 `pms_product` 进行关联,避免使用嵌套子查询。例如:
```
SELECT a.`id`, a.`name`, a.`parent_id`
FROM `pms_assess` AS a
INNER JOIN `pms_product` AS p ON a.`parent_id` = p.`catalog_id`
WHERE p.`id` = 1663780757367164929;
```
2. 添加索引:可以为 `pms_assess` 表中的 `parent_id` 字段添加索引,以提高关联查询的性能。
3. 缓存查询结果:如果该查询结果对于系统来说是相对稳定的,可以考虑使用缓存技术,将查询结果缓存到内存或者 Redis 等缓存中,避免每次都执行查询操作,从而提高系统性能。
需要注意的是,具体优化方案需要根据实际情况进行选择,不同的优化方案可能对不同的系统和数据表达到不同的效果。
阅读全文