【问题标题】:Where is the mistake for this query logic?这个查询逻辑的错误在哪里?
【发布时间】: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 $');

我也有限制(我不确定这对你是否重要)

【问题讨论】:

标签: sql oracle


【解决方案1】:

实际上,您的查询根据您的数据给出了正确的结果。 (查询...ON CT.TransactionID = CT.id WHERE...中只有一处变化应该是...ON CT.TransactionID = T.id WHERE...

CONTRACTS 表中,CLIENTID 2 被分配给两个合约ID = 1 and 3。因此查询与两个客户端匹配。

如果您按如下方式更新CONTRACTS 表,那么它会给出正确的结果。

UPDATE CONTRACTS 
SET CLIENTID = 3 
WHERE ID = 3

db fiddle demo

【讨论】:

  • 是的,我后来意识到了,但非常感谢你^-^
猜你喜欢
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多