【数据库差异研究】别名与表字段冲突,不同数据库在where中的处理行为

news2024/10/4 10:48:17

目录

⚛️总结

☪️1 问题描述

☪️2 测试用例

♋2.1 测试单层查询

♏2.1.1 SQLITE数据库

♐2.1.2 ORACLE数据库

♑2.1.3 PG数据库

♋2.2 测试嵌套查询

♉2.2.1 SQLITE数据库

♈2.2.2 ORACLE数据库

🔯2.2.3 PG数据库


⚛️总结

单层查询

数据库类型别名与表字段重名冲突处理方式
SQLITEWHERE 子句中使用表字段而非别名
ORACLEWHERE 子句中使用表字段而非别名
PGWHERE 子句中使用表字段而非别名

嵌套查询

查询类型子查询内层 where 冲突处理外层 where 冲突处理
SQLITE有别名使用表字段使用子查询中的表字段
SQLITE无别名使用表字段使用子查询中的表字段
ORACLE有别名使用表字段使用子查询中的表字段
ORACLE无别名使用表字段使用子查询中的表字段
PG有别名使用表字段使用子查询中的表字段
PG无别名PG报错PG报错

☪️1 问题描述

一、当单层查询发生别名与表字段重名冲突时,不同数据库在where中的处理行为是怎样的呢?

这里的处理行为无非两种

  • where 处理的是表字段而非别名。
  • where 处理的是别名而非表字段。

说明:对于表字段与别名重名冲突, where 有时处理的是表字段而非别名,有时处理的是别名而非表字段。显然这种数据库设计是存在问题的,本文不予考虑。


二、当嵌套查询发生别名与表字段重名冲突时,不同数据库在where中的处理行为是怎样的呢?

详见后文。


☪️2 测试用例

本文设计的测试表与数据如下:

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

使用 LEFT JION 查询语句如下:

-- LEFT JION 之后的表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

LEFT JION 之后的表——后续称之为 查询表

client_iduser_token
2211111111
10002100021

对于 查询表 的表字段 user_token(别名) u_client 的表字段 user_token(表字段) 发生了重名冲突。


2.1 测试单层查询

在测试用例基础上,设计的测试用例与预期行为如下:

测试场景一:

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111';
  • 结果如下,说明在单层查询中,当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。
    client_iduser_token
    2211111111
  • 结果如下,说明在单层查询中,当别名和表字段发生重名冲突时,在 where 中使用的是别名而非表字段。
    client_iduser_token

 测试场景二(二次验证):

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '211111111';
  • 结果如下,说明在单层查询中,当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。
    client_iduser_token
  • 结果如下,说明在单层查询中,当别名和表字段发生重名冲突时,在 where 中使用的是别名而非表字段。
    client_iduser_token
    2211111111

♏2.1.1 SQLITE数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景一:

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。


 测试场景二(二次验证):

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '211111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。

结论

单层查询:当别名和表字段发生重名冲突时,SQLITE 在 where 中使用的是表字段而非别名。


♐2.1.2 ORACLE数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景一:

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。


 测试场景二(二次验证):

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '211111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。

结论

单层查询:当别名和表字段发生重名冲突时,ORACLE 在 where 中使用的是表字段而非别名。


♑2.1.3 PG数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景一:

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。


 测试场景二(二次验证):

SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '211111111';

结论:说明当别名和表字段发生重名冲突时,在 where 中使用的是表字段而非别名。

结论

单层查询:当别名和表字段发生重名冲突时,PG 在 where 中使用的是表字段而非别名。


2.2 测试嵌套查询

根据3.1 章节可知:单层查询

数据库类型别名与表字段重名冲突处理方式
SQLITEWHERE 子句中使用表字段而非别名
ORACLEWHERE 子句中使用表字段而非别名
PGWHERE 子句中使用表字段而非别名

在测试用例基础上,设计的测试用例与预期行为如下:

测试场景三(嵌套查询——含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111') t
WHERE t.user_token = '211111111';
  • 结果如下,说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是实际的表字段。
    client_iduser_token
  • 结果如下,说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。
    client_iduser_token
    2211111111

  测试场景四(嵌套查询——不含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111')
WHERE user_token = '211111111';
  • 结果如下,说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是实际的表字段。
    client_iduser_token
  • 结果如下,说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。
     
    client_iduser_token
    2211111111

♉2.2.1 SQLITE数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景三(嵌套查询——含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111') t
WHERE t.user_token = '211111111';

 结论:说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。


  测试场景四(嵌套查询——不含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111')
WHERE user_token = '211111111';

 结论:说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。

结论

嵌套查询: 说明在嵌套查询中子查询有或没有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询中的表字段。


♈2.2.2 ORACLE数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景三(嵌套查询——含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111') t
WHERE t.user_token = '211111111';

结论:说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。


  测试场景四(嵌套查询——不含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111')
WHERE user_token = '211111111';

 

 结论:说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。

结论

嵌套查询: 说明在嵌套查询中子查询有或没有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询中的表字段。


🔯2.2.3 PG数据库

基础数据——满足测试表与数据

-- 创建表 u_client
CREATE TABLE u_client (
    client_id VARCHAR(20) PRIMARY KEY,
    Name VARCHAR(50),
    personalID VARCHAR(20),
    address VARCHAR(100),
    user_token VARCHAR(20),
    Email VARCHAR(50),
    mobile_tel VARCHAR(20)
);

-- 插入数据到 u_client 表
INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('2', 'test', '20240702', 'hangzhou', '11111111', '306891687@163.com', '13345671234');

INSERT INTO u_client(client_id, Name, personalID, address, user_token, Email, mobile_tel)
VALUES('10002', 'test', '20240702', 'hangzhou', '1', '306891687@163.com', '13345671234');

-- 创建表 u_fund_account
CREATE TABLE u_fund_account (
    password VARCHAR(50),
    client_id VARCHAR(20),
    fund_account VARCHAR(50),
    PRIMARY KEY(client_id, fund_account)
);


-- 插入数据到 u_fund_account 表
INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD1', '2', 'account1');

INSERT INTO u_fund_account(password, client_id, fund_account)
VALUES('PWD2', '10002', 'account2');

-- 查询表
select * from u_client;
select * from u_fund_account;

-- 查询表
SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id;

表u_client

client_idNamepersonalIDaddressuser_tokenEmailmobile_tel
2test20240702hangzhou11111111306891687@163.com13345671234
10002test20240702hangzhou1306891687@163.com13345671234

u_fund_account

passwordclient_idfund_account
PWD12account1
PWD210002account2

查询表

client_iduser_token
2211111111
10002100021

别名冲突查询结果

测试场景三(嵌套查询——含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111') t
WHERE t.user_token = '211111111';

 结论:说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。


  测试场景四(嵌套查询——不含子查询别名):

SELECT * FROM
(SELECT
    a.client_id AS client_id,
    b.client_id || a.user_token AS user_token
FROM u_client a LEFT JOIN u_fund_account b 
ON a.client_id = b.client_id
WHERE user_token = '11111111')
WHERE user_token = '211111111';

结论:PG报错。

对于高斯数据库

结论:说明在嵌套查询中子查询有别名,高斯数据库在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。

结论

嵌套查询:

  • 说明在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。
  • 说明在嵌套查询中子查询无别名,PG报错,但对于高斯数据库:
    在嵌套查询中子查询有别名,在内层查询的别名和表字段发生重名冲突时,内层 where 中使用的是表字段而非别名;外层 where 中使用的是子查询结果中的表字段。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187864.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

字节终面问 Transformer,太难了。。。

最近已有不少大厂都在秋招宣讲了,也有一些在 Offer 发放阶段。 节前,我们邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对新手如何入门算法岗、该如何准备面试攻略、面试常考点、大模型技术趋势、算法项目落地经验分享等热门话题进行了…

厦门网站设计的用户体验优化策略

厦门网站设计的用户体验优化策略 在信息化快速发展的今天,网站作为企业与用户沟通的重要桥梁,用户体验(UX)的优化显得尤为重要。尤其是在交通便利、旅游资源丰富的厦门,吸引了大量企业进驻。在这样竞争激烈的环境中&am…

后端向页面传数据(内容管理系统)

一、登录 首先&#xff0c;做一个登录页面。 在这里&#xff0c;注意 内容框里的提示信息用placeholder <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthd…

基于J2EE技术的高校社团综合服务系统

目录 毕设制作流程功能和技术介绍系统实现截图开发核心技术介绍&#xff1a;使用说明开发步骤编译运行代码执行流程核心代码部分展示可行性分析软件测试详细视频演示源码获取 毕设制作流程 &#xff08;1&#xff09;与指导老师确定系统主要功能&#xff1b; &#xff08;2&am…

Visual Studio AI插件推荐

声明&#xff1a;个人喜好&#xff0c;仅供参考。 1、AI插件 Fitten Code&#xff08;免费&#xff09; Fitten Code 是由非十大模型驱动的AI编程助手&#xff0c;支持多种编程语言&#xff0c;支持主流几乎所有的IDE开发工具。包括VS Code、Visual Studio、JetBrains系列I…

Visual Studio 小技巧记录

1、将行距设置成1.15跟舒服一些。 2、括号进行颜色对比。 效果&#xff1a; 3、显示参数内联提示。 效果&#xff1a; 4、保存时规范化代码。 配置文件&#xff1a; 5、将滚动条修改为缩略图 效果&#xff1a;

MongoDB 数据库服务搭建(单机)

下载地址 下载测试数据 作者&#xff1a;程序那点事儿 日期&#xff1a;2023/02/15 02:16 进入下载页&#xff0c;选择版本后&#xff0c;右键Download复制连接地址 下载安装包 ​ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-5.0.14.tgz​ …

开放式耳机哪个品牌好?好用且高性价比的开放式蓝牙耳机推荐

相信很多经常运动的朋友都不是很喜欢佩戴入耳式耳机&#xff0c;因为入耳式耳机真的有很多缺点。 安全方面&#xff1a;在安全上就很容易存在隐患&#xff0c;戴上后难以听到周围环境声音&#xff0c;像汽车鸣笛、行人呼喊等&#xff0c;容易在运动中发生意外。 健康方面&…

智慧管控平台技术解决方案

1. 智慧管控平台概述 智慧管控平台采用先进的AI技术&#xff0c;围绕一个中心和四大应用构建&#xff0c;旨在打造一个智能、共享、高效的智慧运营管理环境&#xff0c;实现绿色节能和业务创新。 2. 平台架构设计 系统整体架构设计包括统一门户管理、IOT平台、大数据、视频云…

螺蛳壳里做道场:老破机搭建的私人数据中心---Centos下docker学习02(yum源切换及docker安装配置)

2 前期工作 2.1 切换yum源并更新 删除/etc/yum.repos.d/原有repo文件&#xff0c;将Centos-7.repo库文件拷贝到该目录下。 然后清楚原有缓存yum clean all 生成新的缓存yum makecache 更新yum update –y 然后再确认/etc/yum.repos.d/不会有其他库文件&#xff0c;只留下…

第十四章 I/O系统

一、I/O系统的分类 1.输入流&#xff1a;程序从输入流读取数据 输出流&#xff1a;程序向输出流写入数据 2.字节流&#xff1a;数据流中的最小的数据单元是字节 字符流&#xff1a;数据流中的最小单元是字符 3.节点流、处理流 二、I/O系统的四个抽象类 1.Java中提供的流类…

MATLAB - 机械臂手眼标定(眼在手外) - 估算固定相机相对于机器人基座的姿态

系列文章目录 前言 在拾取和放置任务中&#xff0c;例如垃圾桶拾取&#xff0c;通常会在环境中的固定位置安装摄像头&#xff0c;以便机器人操纵器检测工作区中的物体。基本感知管道使用该摄像头来估计目标物体相对于摄像头坐标系的姿态。然后将该姿态转换到机器人的基准坐标系…

360浏览器时不时打不开csdn

从百度或者csdn的搜索中打开&#xff0c;会发现打不开网页&#xff0c;以前也出现过&#xff0c;只是以为这篇文章被删了&#xff0c;昨天接连多个文章打不开&#xff0c;怀疑的浏览器的问题&#xff0c;复制网址到edge浏览器就打开了 刚刚又出现了&#xff0c;怀疑360会拦截某…

探索TOGAF理论的实践应用:企业数字化转型的深度指南

数字化转型的迫切性与路径选择 随着全球化进程和技术革命的加速&#xff0c;企业正面临前所未有的挑战和机遇。数字化转型已成为企业保持竞争力、创新业务模式、优化客户体验的核心手段。然而&#xff0c;企业在实施数字化转型时&#xff0c;往往面临路径不清、技术与业务脱节…

高性能防静电主轴4033 AC-ESD 在线路板切割中的非凡表现

随着电子产品的日益小型化/集成化&#xff0c;线路板的制造也面临着更高的挑战。线路板分板作为电子制造流程中的关键环节&#xff0c;其效率和精度直接影响到最终产品的质量和市场竞争力。因此专用的高性能防静电主轴SycoTec 4033 AC-ESD凭借其卓越的性能&#xff0c;成为众多…

多系统萎缩患者必知的营养补充指南

亲爱的朋友们&#xff0c;今天我们要聊的是一个较为少见但影响深远的疾病——多系统萎缩&#xff08;Multiple System Atrophy, MSA&#xff09;。这是一种成年期发病的神经系统退行性疾病&#xff0c;给患者的日常生活带来了诸多不便。但别担心&#xff0c;通过合理的营养补充…

JAVA开源项目 旅游管理系统 计算机毕业设计

本文项目编号 T 063 &#xff0c;文末自助获取源码 \color{red}{T063&#xff0c;文末自助获取源码} T063&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析5.4 用例设计 六、核…

QGIS中怎么裁剪与掩膜提取

最近&#xff0c;我接到了一个关于QGIS中矢量与栅格与栅格数据怎么裁剪与掩膜提取到自己想要区域的咨询。 其实这个操作&#xff0c;与arcgis中的操作其实是类似的 下面是我对这个问题的解决思路&#xff1a; 首先得把栅格与矢量数据加载进去&#xff0c;如下图&#xff1a;…

基于SSM的农家乐预约系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

【JavaEE】——CAS指令和ABA问题

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 一&#xff1a;CAS指令 1&#xff1a;概念 2&#xff1a;伪代码例子说明 3&#xff1a;优点 二&am…