对虚拟的表使用SQL SELECT语句

2008-11-24    | |
打印本文章
RSS

导读:专家建议:最简单的解决方法就是用一个包含测试字符串的表对T1表进行测试。 这种方法就是LEFT OUTER JOIN,它包括WHERE子句IS NULL测试,查找左边的表中……

关键词:Oracle Oracle SQL SQL SELECT语句

正在加载数据... 【TechTarget中国原创】我有一个字符串清单(不在表中)如下……,我的T1表有一个VARCHAR x。在x列里的数据如下所示……,因为在表中不包含 'bbbbb',所以我想用一个查询将 'bbbbb'放入查询中。同时我还不想用另一个表进行查询。

【TechTarget中国原创】问:我有一个字符串清单(不在表中)如下:

'aaaaa'
'bbbbb'
'ccccc'

  我的T1表有一个VARCHAR x。在x列里的数据如下所示:


'aaaaa'
'ccccc'

  因为在表中不包含 'bbbbb',所以我想用一个查询将 'bbbbb'放入查询中。 同时我还不想用另一个表进行查询。请你帮帮我!

  答:无论你是不是喜欢,最简单的解决方法就是用一个包含测试字符串的表对T1表进行测试。 这种方法就是LEFT OUTER JOIN,它包括WHERE子句IS NULL测试,查找左边的表中(你要测试的字符串)那些没有在右边表中与之对应的行(T1表)。

  你说不想用第二个表,那么解决方案就是在没有真正创建表的情况下打到这个目的。我们将使用一个虚拟的表。

  有两种方法:首先,不是真正的Standard SQL,就是创建虚拟表。


SELECT dt.string
  FROM ( SELECT 'aaaaa' AS string
         UNION ALL
         'bbbbb' 
         UNION ALL
          SELECT 'ccccc'
       ) AS dt
LEFT OUTER
  JOIN T1
    ON T1.x = dt.string
 WHERE T1.x IS NULL

  在这里"dt"是一个表别名,代表一个派生表,这就是我们FROM子句中用到的子查询。

  在子查询中,我们看到了几个SELECT语句在一起使用,但是它们中没有FROM子句。只有某个数据库系统支持SELECT语句,但是它没有FROM子句(微软SQL Server和MySQL有)。

  如果你的数据库系统需要一个FROM子句,那么你所需要做的就是在任意一个合适的表中选择这些字符串,这样就很容易对一个具体的行进行操作。在Oracle中,你已经创建了一个可以使用的DUAL表,可能你会用到这个表。由于只有一个行,所以在这种环境下它就能够使用。


SELECT dt.string
  FROM ( SELECT 'aaaaa' AS string 
           FROM dual
         UNION ALL
         SELECT 'bbbbb' 
           FROM dual
         UNION ALL
          SELECT 'ccccc'
           FROM dual
       ) AS dt
LEFT OUTER
  JOIN T1
    ON T1.x = dt.string
 WHERE T1.x IS NULL

  注意:无论DUAL表中实际用的是哪些列,因为我们选择的是一个恒量而不是列。 如果你用不是用的Oracle但仍然需要FROM子句,你可以使用你希望的表,包括T1 表,如果在只在表中检索一行的话。


SELECT dt.string
  FROM ( SELECT 'aaaaa' AS string 
           FROM T1 
          WHERE x = 'aaaaa'
         UNION ALL
         SELECT 'bbbbb' 
           FROM T1 
          WHERE x = 'aaaaa'
         UNION ALL
          SELECT 'ccccc'
           FROM T1 
          WHERE x = 'aaaaa'
       ) AS dt
LEFT OUTER
  JOIN T1
    ON T1.x = dt.string
 WHERE T1.x IS NULL

  是不是很漂亮呢?

查看全文
相关的白皮书
 
如何创建数据连接?如何导出或导入数据库连接?怎样浏览数据库对象?本文针对上述几个问题详细介绍如何使用SQL Developer来操作Oracle数据库。
 
Oracle SQL Developer是一款怎样的工具?它具有什么功能?本文主要介绍如何使用SQL Developer来操作Oracle数据库。
 
如何查看手册?如何查找信息?如何使用Oracle数据库SQL参考手册?本文针对上述问题通过图例进行了详细阐述。
 
如何打开并保存SQL语句?如何输入并执行一个SQL脚本?本文侧重介绍使用SQL Developer执行SQL语句的过程中的这两个问题。
 
在使用SQL Developer执行SQL语句的过程中我们如何使用摘录窗口?如何处理语法错误?
在SQL Server中,我们如何进行索引设计来提升系统的性能和对查询进行优化,是许多用户非常关注的问题,在本次技术专题中,我们将分群集索引和非群集索引设计两部分来为您详细分析。
本技术专题主要为使用Oracle SQL Developer和其他开发工具。包括如何使用Oracle SQL Developer和其他开发工具、使用Oracle Database Home Page、在Oracle中使用SQL*Plus等方面。
本专题为QL SELECT语句基础。侧重概述了如何使用SELECT来访问SQL数据库中所有内容以及组成SELECT语句的许多子句名称和功能;同时还阐述了如何使用DISTINCT关键字消除重复的行,以及如何正确使用ORDER BY子句来排序数据。
最新更新
专家答疑
技巧
Brian Fedorko
Oracle数据库审计功能十分强大、灵活并且易于配置,适当并有效地使用数据库审计功能是拥有高效安全策略的基础。
Brian Peasland
Oracle数据库二进制文件和库文件是高版本版本的,而备份的数据库内部如果仍然是较低版本,那么Oracle将不允许你打开数据库,除非你完成了升级过程。
Maria Anderson
在Windows XP环境下,使用数据库升级助手将Oracle从9.2.0.1升级到10g R2,出现DBUA不能识别Oracle数据库的SID问题如何解决。

登录TechTarget中国

关闭
本服务仅向TechTarget中国的会员开放,请登录或立即免费注册
登录Email
请输入您的登录Email
密码
下次自动登录