【发布时间】:2021-03-15 17:40:24
【问题描述】:
我正在做一些项目,我有 8 个表我为自己创建了任务以提高我的知识,当我这样做时,我在查询过程中遇到了问题 在下面有示例表和数据
CREATE TABLE Clients
(ID NUMBER(10),
name VARCHAR(30) NOT NULL,
surname VARCHAR(30) NOT NULL,
Cbudget NUMBER(10,2),
CompanyID NUMBER(10) NOT NULL,
PRIMARY KEY(ID));
Describe Clients
CREATE TABLE Contracts
(ID NUMBER(20),
ContractValue CHAR(255) NOT NULL,
CompanyID NUMBER(10) NOT NULL,
ClientID NUMBER(10) NOT NULL,
TransactionID NUMBER(10) NOt NULL,
PRIMARY KEY(ID));
Describe Contracts
ALTER TABLE Contracts ADD ClientID NUMBER
CREATE TABLE "Transaction"
(ID NUMBER(10),
Type NUMBER(1) NOT NULL,
Price NUMBER(10,2),
TDATE date,
ClientID NUMBER(10) NOT NULL,
PRIMARY KEY(ID));
Describe "Transaction"
这是数据
INSERT INTO Clients(ID,name,surname,Cbudget,CompanyID) VALUES (1,'hamza','bacara',98372.200,2);
INSERT INTO Clients(ID,name,surname,Cbudget,CompanyID) VALUES (2,'','bacara',87432.400,1);
INSERT INTO Clients(ID,name,surname,Cbudget,CompanyID) VALUES (3,'batikan','falay',213132.00,2);
INSERT INTO "Transaction"(ID,Type,Price,TDATE,ClientID)VALUES(1,'1',5000,current_date,2);
INSERT INTO "Transaction"(ID,Type,Price,TDATE,ClientID)VALUES(2,'1',6000,'11/09/2006',1);
INSERT INTO "Transaction"(ID,Type,Price,TDATE,ClientID)VALUES(3,'2',9000,current_date,3);
INSERT INTO Contracts(ID,ContractValue,CompanyID,ClientID,TransactionID)VALUES(1,'1 Million $',1,2,1);
INSERT INTO Contracts(ID,ContractValue,CompanyID,ClientID,TransactionID)VALUES(2,'50 Million $',2,1,2);
INSERT INTO Contracts(ID,ContractValue,CompanyID,ClientID,TransactionID)VALUES(3,'100 Million $',2,2,3);
这是查询(它有效,但每次它只显示“1亿美元”的数据
SELECT * FROM Contracts WHERE ClientID IN
(SELECT T.ClientID FROM "Transaction" T
INNER JOIN Contracts CT ON CT.TransactionID = CT.id WHERE CT.ContractValue = '1 Million $');
我也有限制(我不确定这对你是否重要)
【问题讨论】:
-
这能回答你的问题吗? behavior of inner join inside exists sql
-
很遗憾,我不明白,因为它还有其他我不知道的关键字。
-
所有
varchar和char列都应该是标准的varchar2。varchar正式保留供将来使用,char是 rather specialised。