sql - 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”时,查询才应返回一行,否则不返回任何内容,然后我在后端代码中处理该结果。
我已经对此进行了测试并且它可以工作,但我觉得它看起来很不稳定并且可以进行优化。有任何想法吗?
解决方案
得到你想要的:
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'
推荐阅读
- c# - Web API + Azure App Insights 将数据从 ActionFilter 传递到 ITelemetryProcessor
- javascript - 仅在 IE 中找不到模块“反应”
- node.js - API 响应数据最佳实践 - nodejs
- javascript - 查找 Javascript 用法
- javascript - 将数组拆分为从负到正的范围
- amazon-web-services - 是否有一份清晰简明的 AWS 产品列表及其主要功能?
- python - Python 命令错误通过
- maven - 为什么在非中央存储库中获取原型时必须使用配置文件?
- uiview - 添加到 SKScene 的 UIView 有奇怪的边框
- c++ - 我的 SWIG 类型图有什么问题?