首页 > 解决方案 > SQL AND 查看是否在两个不同的表中设置了两个标志?

问题描述

SELECT 1 FROM
(SELECT 1 FROM mytable1 WHERE parentid = 'ID1' AND flag = 'Y') as X,
(SELECT 1 FROM mytable2 WHERE id = 'ID2' AND flag = 'Y') as Y 

我正在查询是否在两个表中设置了两个标志,其中“parentid”和“id”都是主键。仅当两个标志都设置为“Y”时,查询才应返回一行,否则不返回任何内容,然后我在后端代码中处理该结果。

我已经对此进行了测试并且它可以工作,但我觉得它看起来很不稳定并且可以进行优化。有任何想法吗?

标签: sqldb2

解决方案


得到你想要的:

SELECT 1
    FROM mytable1 AS a, mytable2 AS b
    WHERE a.parentid = 'ID1' AND a.flag = 'Y'
        AND b.id = 'ID2' AND b.flag = 'Y' 

但实际上,我更喜欢使用 LEFT JOIN 的查询,它总是给出一行,如下所示:

SELECT CASE WHEN a.flag = 'Y' AND b.flag = 'Y' THEN 1 ELSE 0 END AS result
    FROM TABLE ( VALUES 1 ) AS always(present)
        LEFT JOIN mytable1 AS a ON a.parentid = 'ID1'
        LEFT JOIN mytable2 AS b ON b.id = 'ID2'

推荐阅读