这是一个令我难以置信几天的问题,我搜索和搜索但找不到任何令人信服的答案!
简单的问题,为什么限制在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和嵌套子查询
我有现有的表有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)
两个问题..
我是否需要Alter语句来添加分区机制或需要使用create语句?
保持每个分区只有一个MONTH数据的正确语法是什么.
背景:ALL_IND_EXPRESSIONS有专栏
Run Code Online (Sandbox Code Playgroud)COLUMN_EXPRESSION LONG Function-based index expression defining the column
我知道这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变长
备注:
PL/SQL blockDBMS_METADATA.GET_DDL (事实并非如此)是否有可能从投/转换/使用内置函数LONG来VARCHAR2?
EDIT TL; DR:
SELECT column_expression || 'a' -- convert to working code
FROM all_ind_expressions;
Run Code Online (Sandbox Code Playgroud) 在 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 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数据工具团队博客上建议的内容
我有一个表格,其中包含布尔值(仅限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)
在以下查询中,将美元符号('$')或货币添加到十进制数据类型的简单方法是什么:
SELECT TOP 100000
SUM ([dbo].[Entry].[Amount]) AS 'Total Charges'
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
以下是有效的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",类似于字符串文字和正则表达式文字.
是否有一个将被广泛认可的术语.
PL/SQL (Oracle 12c) 中是否有与此 T-SQL 查询等效的内容?
UPDATE A SET A.columnA = 10 WHERE A.columnB < 30 OUTPUT INSERTED.*, DELETED.*
查询更新表A,同时返回更新前和更新后记录的状态。
对于我来说,触发器以及更新前的 SELECT 记录和更新后的 SELECT 记录都不是一个解决方案。
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)
不幸的是,我无法使用内联索引定义创建相同的构造:
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)
我是否会错过一些明显的或者是一个错误?
sql ×8
oracle ×4
sql-server ×3
t-sql ×3
create-table ×2
oracle12c ×2
alter-table ×1
asp.net ×1
c# ×1
join ×1
msbuild ×1
mysql ×1
partition ×1
plsql ×1
postgresql ×1
replace ×1
terminology ×1