MS SqlServer 中的 Oracle“双”表的等价物是啥?
Posted
技术标签:
【中文标题】MS SqlServer 中的 Oracle“双”表的等价物是啥?【英文标题】:What is the equivalent of the Oracle "Dual" table in MS SqlServer?MS SqlServer 中的 Oracle“双”表的等价物是什么? 【发布时间】:2015-04-06 22:10:52 【问题描述】:MS SqlServer 中的 Oracle “Dual”表的等价物是什么?
这是我的Select
:
SELECT pCliente,
'xxx.x.xxx.xx' AS Servidor,
xxxx AS Extension,
xxxx AS Grupo,
xxxx AS Puerto
FROM DUAL;
【问题讨论】:
【参考方案1】:在sql-server
,没有dual
你可以简单的做
SELECT pCliente,
'xxx.x.xxx.xx' AS Servidor,
xxxx AS Extension,
xxxx AS Grupo,
xxxx AS Puerto
但是,如果您的问题是因为您从 Oracle
传输了一些引用 dual
的代码,您可以重新创建表:
CREATE TABLE DUAL
(
DUMMY VARCHAR(1)
)
GO
INSERT INTO DUAL (DUMMY)
VALUES ('X')
GO
【讨论】:
最好更改查询,而不是在 SQL Server 中引入dual
表。 Oracle 的优化器将双表识别为特殊并跳过访问它,asktom.oracle.com/pls/asktom/…
谢谢,这也适用于 Virtuoso 开源数据库。
dual
最初是为一些内部用例创建的,在该用例中加入它会复制行,但在某些时候事情失控了,因为 Oracle 愚蠢地需要 @ 987654331@ 子句即使选择的值不需要表格。
什么时候我想使用JOIN clause 就像在这个例子中SELECT * FROM ( SELECT 'COL1' COL1, 'COL2' COL2, M FROM DUAL FULL OUTER JOIN (SELECT 'COL3-ROW1' M FROM DUAL UNION ALL SELECT 'COL3-ROW2' M FROM DUAL) ON 1=1 )
一样
我遇到了类似的问题。我必须在自己编写查询的框架中编写特定的查询。我使用表(values('x')) DUAL(DUMMY)
从一个查询中检索结果,该查询有一个带有ANY
结果的单列(粗体表示框架,斜体表示我作为参数输入的内容):SELECT 'X' = ANY 的情况(从表中选择列)然后 1 ELSE 0 结束结果 FROM (VALUES('X')) DUAL(DUMMY) 。它适用于大多数 SQL 引擎。【参考方案2】:
mssql server 中不需要 DUAL
在甲骨文中
select 'sample' from dual
等于
SELECT 'sample'
在 sql 服务器中
【讨论】:
我认为没有理由在接受答案一年后回答同样的问题...... 相同的答案但更清晰。话虽如此,我在没有 FROM 的情况下运行了两个示例并得到了错误。【参考方案3】:虽然您通常不需要 SQL Server 中的 DUAL
表,正如 Jean-François Savard 所解释的那样,但我过去出于语法原因需要模拟 DUAL
。以下是三个选项:
创建DUAL
表或视图
-- A table
SELECT 'X' AS DUMMY INTO DUAL;
-- A view
CREATE VIEW DUAL AS SELECT 'X' AS DUMMY;
创建后,您可以像在 Oracle 中一样使用它。
使用公用表表达式或派生表
如果您只需要 DUAL
来作为单个查询的范围,也可以这样做:
-- Common table expression
WITH DUAL(DUMMY) AS (SELECT 'X')
SELECT * FROM DUAL
-- Derived table
SELECT *
FROM (
SELECT 'X'
) DUAL(DUMMY)
【讨论】:
【参考方案4】:在 SQL Server 中没有双表。如果你想放一个WHERE
子句,你可以简单的直接这样放:
SELECT 123 WHERE 1<2
我认为在 mysql 和 Oracle 中,他们需要一个 FROM 子句才能使用 WHERE 子句。
SELECT 123 FROM DUAL WHERE 1<2
【讨论】:
不确定为什么人们不喜欢 Heng 的答案 - Heng 扩展了之前的答案,Heng 指出您也可以使用 where 子句而不使用 from ,而其他解决方案没有提到.以上是关于MS SqlServer 中的 Oracle“双”表的等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章