加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

sql – 使用CTE的奇怪结果

发布时间:2020-12-12 06:38:39 所属栏目:MsSql教程 来源:网络整理
导读:有人可以解释一下为什么这个脚本返回’some_word’而不是错误,因为没有存在的模式试图从schema_that_doesnt_exist.tab中检索数据? with tab as ( select 'some_word' str from dual)select * from schema_that_doesnt_exist.tab; 有关此问题的Oracle文档中的
有人可以解释一下为什么这个脚本返回’some_word’而不是错误,因为没有存在的模式试图从schema_that_doesnt_exist.tab中检索数据?
with tab as 
(
     select 'some_word' str 
     from dual
)
select * 
from schema_that_doesnt_exist.tab;

有关此问题的Oracle文档中的某些URL也会对我有所帮助.

解决方法

我猜它与 qualified names bypass with有联系:

MariaDB Demo

Oracle Demo

SQLite Demo – 没有这样的表:schema_that_doesnt_exists.tab

PostgreSQL Demo – 关系“schema_that_doesnt_exists.tab”不存在

SQLServer Demo – 无效的对象名称’schema_that_doesnt_exists.tab’.

与…一样:

图片来自:https://modern-sql.com/blog/2018-04/mysql-8.0

无论如何,当您需要为数据库单元测试(只读查询)模拟一些数据时,它可能很有用.

例如:

SELECT *
FROM schema.table_name  -- here goes real data (lots of records)
WHERE col = 'sth';

如果我想为测试准备输入数据集,我必须使用实际数据.
使用WITH我可以将其重写为:

WITH table_name AS (
    SELECT 'sth'  AS col,... FROM dual UNION ALL
    SELECT 'sth2' AS col,... FROM dual...
)
SELECT *
FROM schema.table_name  -- cte is closer and data is taken from it
WHERE col = 'sth';

更多:Unit Tests on Transient Data

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读