小编Luk*_*zda的帖子

同桌上有2个外接头?

这是一个令我难以置信几天的问题,我搜索和搜索但找不到任何令人信服的答案!

简单的问题,为什么限制在SQL中有2个外部联接,即使使用不同的列也在同一个表上,检查下面的查询以便更好地理解.我也可以使用嵌套的子查询或ANSI连接来克服它们,但是为什么它甚至首先使用(+)运算符进行限制!

在这个问题中,我指的是错误:

ORA-01417:一个表可以外部连接到至多另一个表

我想问的是为什么允许这样做:

select * from
a, b, c
where a.a1 = b.b1
and a.a2 = c.c1
Run Code Online (Sandbox Code Playgroud)

为什么不允许这样做:

select * from
a, b, c
where a.a1(+) = b.b1
and a.a2(+) = c.c1
Run Code Online (Sandbox Code Playgroud)

请单独保留ANSI和嵌套子查询

sql oracle join

8
推荐指数
1
解决办法
1万
查看次数

如何更改现有表以在Oracle中创建范围分区

我有现有的表有10年的数据(我已经采取转储).

我想在表中的一个日期键列上对现有表进行Range分区.

我看到的大多数示例都是CREATE TABLE..PARTITION BY RANGE...为了添加新分区.但我的桌子是现有的桌子.

我想我需要一些ALTER陈述.

ALTER TABLE TABLE_NAME
PARTITION BY RANGE(CREATED_DATE)
 PARTITION JAN16 VALUES LESS THAN (01-02-2016),
 PARTITION FEB16 VALUES LESS THAN (01-03-2016) AND GREATER THAN(31-01-2016),//OR?
 PARTITION MAR16 VALUES BETWEEN (01-03-2016) AND (31-03-2016),  //OR?
Run Code Online (Sandbox Code Playgroud)

两个问题..

  1. 我是否需要Alter语句来添加分区机制或需要使用create语句?

  2. 保持每个分区只有一个MONTH数据的正确语法是什么.

oracle alter-table create-table partition

8
推荐指数
2
解决办法
2万
查看次数

如何将LONG转换为内联的VARCHAR2

背景:ALL_IND_EXPRESSIONS有专栏

COLUMN_EXPRESSION   LONG   Function-based index expression defining the column
Run Code Online (Sandbox Code Playgroud)

我知道这LONG已被弃用了.我需要编写类似的东西(或做其他文本操作):

SELECT 
  REPLACE(REPLACE(REPLACE(
    q'{ALTER INDEX "<index_owner>"."<index_name>" ON ... (<column_expression>)}'
   ,'<index_owner>', index_owner )
   ,'<index_name>', index_name) 
   ,'<column_expression>', column_expression) AS result
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud)

ORA-00932:不一致的数据类型:预期NUMBER变长

DBFiddle演示

备注:

  • 它必须是自包含的查询
  • 没有中间对象(创建表/视图不是一个选项).
  • 没有 PL/SQL block
  • DBMS_METADATA.GET_DDL (事实并非如此)
  • WITH FUNCTION子句作为最后的手段

是否有可能从投/转换/使用内置函数LONGVARCHAR2

EDIT TL; DR:

SELECT column_expression || 'a'  -- convert to working code
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle12c

8
推荐指数
1
解决办法
7629
查看次数

Postgres 9.5 关于冲突做选择

在 Postgres 9.5 中执行 UPSERT 时,是否可以在 INSERT 成功时返回 null 并在 CONFLICT 时返回某些内容?

我想要这样的东西:

insert into "user" (timestamp, user_id, member_id) 
values ($1, $2, $3)
ON CONFLICT (user_id, member_id) 
DO select id from "user" where user_id = $2 returning user_id
Run Code Online (Sandbox Code Playgroud)

选择 user_id 的唯一目的是在冲突时返回某些内容(除 null 以外的任何内容),并且不写入磁盘。我知道这可以通过 ON CONFLICT DO UPDATE 来完成,但这会涉及写入磁盘。

sql postgresql postgresql-9.5

8
推荐指数
1
解决办法
4667
查看次数

如何将连接字符串作为参数发送到MsBuild以执行SQL架构比较?

SQL Server数据工具团队博客中提到,现在可以使用的MSBuild执行两个DacPacs或数据库的模式比较.但是,他们没有提到如何将连接字符串传递给源数据库和目标数据库.如果我设置参数/ p:source ="我的连接字符串"我得到错误:

MSBUILD:错误MSB4177:无效的属性.名称"初始目录"包含无效字符"".

我的PowerShell脚本发送到msbuild的命令行是:

msbuild ".\SchemaCompare.proj" /t:SqlSchemaCompare 
/p:source="$sourceConnString" /p:target="$targetConnString" 
/p:XmlOutput="$schemaCompareReportPath" 
Run Code Online (Sandbox Code Playgroud)

SchemaCompare.proj包含SQL Server数据工具团队博客上建议的内容

sql msbuild sql-server-data-tools

7
推荐指数
1
解决办法
1123
查看次数

如何使用REPLACE()替换mysql SELECT查询中的1列中的多个值?

我有一个表格,其中包含布尔值(仅限0和1),需要对客户端进行CSV格式化.我知道我可以做1替换像这样:

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes') 
FROM myTable 
WHERE id > 1000;
Run Code Online (Sandbox Code Playgroud)

这会将1的所有值转换为'是',但如何在单个查询中为1 =>是和0 =>否这样做布尔结果存储在一个列中?我试着这样做:

SELECT REPLACE(email, '%40', '@'),
       REPLACE(name,'%20', ' '),
       REPLACE(icon_clicked, 1, 'Yes'),
       REPLACE(icon_clicked, 0, 'No')
FROM myTable
WHERE id > 1000;
Run Code Online (Sandbox Code Playgroud)

但是这个查询为'No'字符串替换创建了一个额外的列(所以最终结果有4列,email,name,icon_clicked-> yes,icon_clicked-> no)

mysql sql replace

7
推荐指数
1
解决办法
2万
查看次数

如何将'$'转换,强制转换或添加到十进制SQL SUM()

在以下查询中,将美元符号('$')或货币添加到十进制数据类型的简单方法是什么:

SELECT TOP 100000  
        SUM ([dbo].[Entry].[Amount]) AS 'Total Charges'
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

c# sql sql-server asp.net

7
推荐指数
1
解决办法
311
查看次数

SELECT*FROM(VALUES(x,y))的名称AS TableLiteral(Col1,Col2)

以下是有效的SQL语法:

SELECT *
    FROM (VALUES ('p','q'),('x','y')) AS TableLiteral(Col1, Col2)
Run Code Online (Sandbox Code Playgroud)

并返回表:

  | Col1 | Col2
----------------
1 |  p   |  q
2 |  x   |  y
Run Code Online (Sandbox Code Playgroud)

这种语法可以进一步用于CTE等.

这有名字吗?我一直称它们为"TableLiterals",类似于字符串文字和正则表达式文字.

是否有一个将被广泛认可的术语.

t-sql sql-server terminology

7
推荐指数
1
解决办法
362
查看次数

ORACLE 更新并返回 OLD 和 NEW 值

PL/SQL (Oracle 12c) 中是否有与此 T-SQL 查询等效的内容?

UPDATE A SET A.columnA = 10 WHERE A.columnB < 30 OUTPUT INSERTED.*, DELETED.*

查询更新表A,同时返回更新前和更新后记录的状态。

对于我来说,触发器以及更新前的 SELECT 记录和更新后的 SELECT 记录都不是一个解决方案。

sql t-sql oracle plsql oracle12c

7
推荐指数
1
解决办法
8787
查看次数

当name与表名相同时,内联索引定义失败

SQL Server对象即表和索引具有自己的命名空间.因此,索引和表格可以具有相同的名称(但这不是常见的/良好的做法):

CREATE TABLE t(id INT PRIMARY KEY, col INT);
CREATE INDEX t ON t(col);

SELECT * FROM sys.tables WHERE name = 't';
SELECT * FROM sys.indexes WHERE name = 't';
Run Code Online (Sandbox Code Playgroud)

db <>小提琴演示

不幸的是,我无法使用内联索引定义创建相同的构造:

CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t(col));
Run Code Online (Sandbox Code Playgroud)

Msg 2714 Level 16 State 5 Line 1

数据库中已经有一个名为"t"的对象.

-- below code is working correctly
CREATE TABLE t(id INT PRIMARY KEY, col INT, INDEX t1(col));
Run Code Online (Sandbox Code Playgroud)

db <>小提琴演示2

我是否会错过一些明显的或者是一个错误?

sql t-sql sql-server create-table sql-server-2017

7
推荐指数
1
解决办法
70
查看次数