Informix 到 linq/sql
Informix to linq/sql
我在 Informix (IBM) 中有疑问,至少我是这么认为的。
我有一些语法,我不知道它们在 linq 或 sql 中会是什么样子。
我的 objective 是在 linq 中进行查询,但欢迎提供任何帮助。
select x
from db:table, outer (db.table2 , db2.table)
where Etc..
现在我不知道带有 2 个参数的外部(连接)。我还有一个 table 创作的脚本,其中有些东西我不明白
int prop1 not null constraint n140-123,
varchar prop2 not null constraint n144-139
现在我知道他们不是外国的或主要的,但这是否表示某种例外情况?
外连接
Informix 在 SQL 标准支持之前很久就支持 OUTER JOIN 符号。出于向后兼容的原因,它仍然支持预标准符号。
出于大多数实用目的,您可以像这样转换查询(使用旧式 OUTER JOIN 表示法):
select x
from db:table, outer(db.table2, db2.table)
where db:table.col1 = db.table2.col2
and db.table2.col3 = db2.table.col4
到现代 'ANSI' OUTER JOIN 表示法:
SELECT x
FROM db:table AS t1
LEFT JOIN db.table2 AS t2 ON t1.col1 = t2.col2
JOIN db2.table AS t3 ON t2.col3 = t3.col4
请注意,Informix 使用符号 db:table
表示数据库 db
中名为 table
的 table;符号 db2.table
表示 table 由当前数据库中名为 table
的用户 db2
拥有,而 db.table2
类似地表示 table 拥有当前数据库中的用户 db
和调用 table2
。除非当前数据库叫db
,这是跨库查询
您可以在 Informix Outer Joins 找到更多关于 Informix 旧式 OUTER JOIN 表示法的信息。
约束符号
声明的符号是一个语法错误:
int prop1 not null constraint n140-123,
varchar prop2 not null constraint n144-139
合理的符号使用下划线而不是破折号:
int prop1 not null constraint n140_123,
varchar prop2 not null constraint n144_139
这只是意味着列上有一个 NOT NULL 约束,并且约束由系统指定名称。有趣的是,如果这两行来自单个 table 的模式,那么 prop1
的约束是在 table 被修改之前创建的,而它的 tabid
是 140, prop2
上的约束是在 table 被修改并且 tabid
更改为 144 时或之后创建的。
我相信标准 SQL 将约束名称放在约束条件之前; Informix 将约束名称放在约束条件之后。 (这种差异有古老的历史原因。)除非您计划启用或禁用约束,否则最简单的方法是不要为 NOT NULL 约束指定显式名称并让系统处理它。主键、外键和检查约束通常最好明确命名。
我在 Informix (IBM) 中有疑问,至少我是这么认为的。
我有一些语法,我不知道它们在 linq 或 sql 中会是什么样子。
我的 objective 是在 linq 中进行查询,但欢迎提供任何帮助。
select x
from db:table, outer (db.table2 , db2.table)
where Etc..
现在我不知道带有 2 个参数的外部(连接)。我还有一个 table 创作的脚本,其中有些东西我不明白
int prop1 not null constraint n140-123,
varchar prop2 not null constraint n144-139
现在我知道他们不是外国的或主要的,但这是否表示某种例外情况?
外连接
Informix 在 SQL 标准支持之前很久就支持 OUTER JOIN 符号。出于向后兼容的原因,它仍然支持预标准符号。
出于大多数实用目的,您可以像这样转换查询(使用旧式 OUTER JOIN 表示法):
select x
from db:table, outer(db.table2, db2.table)
where db:table.col1 = db.table2.col2
and db.table2.col3 = db2.table.col4
到现代 'ANSI' OUTER JOIN 表示法:
SELECT x
FROM db:table AS t1
LEFT JOIN db.table2 AS t2 ON t1.col1 = t2.col2
JOIN db2.table AS t3 ON t2.col3 = t3.col4
请注意,Informix 使用符号 db:table
表示数据库 db
中名为 table
的 table;符号 db2.table
表示 table 由当前数据库中名为 table
的用户 db2
拥有,而 db.table2
类似地表示 table 拥有当前数据库中的用户 db
和调用 table2
。除非当前数据库叫db
,这是跨库查询
您可以在 Informix Outer Joins 找到更多关于 Informix 旧式 OUTER JOIN 表示法的信息。
约束符号
声明的符号是一个语法错误:
int prop1 not null constraint n140-123,
varchar prop2 not null constraint n144-139
合理的符号使用下划线而不是破折号:
int prop1 not null constraint n140_123,
varchar prop2 not null constraint n144_139
这只是意味着列上有一个 NOT NULL 约束,并且约束由系统指定名称。有趣的是,如果这两行来自单个 table 的模式,那么 prop1
的约束是在 table 被修改之前创建的,而它的 tabid
是 140, prop2
上的约束是在 table 被修改并且 tabid
更改为 144 时或之后创建的。
我相信标准 SQL 将约束名称放在约束条件之前; Informix 将约束名称放在约束条件之后。 (这种差异有古老的历史原因。)除非您计划启用或禁用约束,否则最简单的方法是不要为 NOT NULL 约束指定显式名称并让系统处理它。主键、外键和检查约束通常最好明确命名。