sql - 如何有条件地禁用 SQL 中的联接?
问题描述
甲骨文,特别是。我需要在声明性查询中在 SQL 中执行以下操作,而不定义变量或 if 条件。考虑以下 SQL:
SELECT *
FROM table1
JOIN table2 on table2.a = table1.a
WHERE table1.d = 4
AND c = (select c from table3 where b=3);
问题是,如果 table3 中没有匹配项,那么 table3 不应该限制行,table3 条件不应该适用(实际上只是删除了上述查询的最后一行)
如何在不首先定义变量的情况下在单个 SQL 语句中执行此操作?
解决方案
您可以添加一个NOT EXISTS
子句来有效地删除c = ...
条件:
SELECT *
FROM table1
JOIN table2 on table2.a = table1.a
WHERE table1.d = 4
AND (NOT EXISTS (SELECT c FROM table3 WHERE b=3)
OR c = (SELECT c FROM table3 WHERE b=3)
)
推荐阅读
- python - 如何反转输入字符串
- python - Python 类(继承)使用 Person、Student、Professor 类
- python-3.x - 如何将代码从 python 3.5 调整到 3.7,将股票数据附加到主文件中
- python - 从 2 TypeError 更新到 python3: can only concatenate str (not "bytes") to str
- ionic3 - 显示单击的项目详细信息而不是整个数组列表
- python - Python - TensorArray 的大小为零,但元素形状 [?,128] 未完全定义
- python - 如何将检测到的对象保存到新图像中
- java - servlet 是否会继承其超类 servlet 的异步支持属性
- angular - 如何使用 Angular 7 代码从当前位置获取附近的 ATM?
- javascript - Javascript window.location 返回两个不同的值?