Sql 如何显示记录OrderID Null Null
我有这个问题。 共有2张表格,第一张是:Sql 如何显示记录OrderID Null Null,sql,oracle,Sql,Oracle,我有这个问题。 共有2张表格,第一张是: OrderID | OrderDetailID 1 | 1 1 | 2 第二种是: OrderDetailID | Quantity | Quality | Description NULL NULL NULL NULL 第二个表没有记录 如何编写Oracle或sql show记录,如下所示: OrderID | OrderDetailID | OrderDetailID |
OrderID | OrderDetailID
1 | 1
1 | 2
第二种是:
OrderDetailID | Quantity | Quality | Description
NULL NULL NULL NULL
第二个表没有记录
如何编写Oracle或sql show记录,如下所示:
OrderID | OrderDetailID | OrderDetailID | Quantity | Quality | Description
1 | 1 | NULL | NULL | NULL| NULL
关键是我不能使用任何完整的外部联接,因为它将触发“无法选择从视图中使用group by、distinct等进行更新”看起来您只是想将空列添加到
表1
的结果集中。如果是,只需:
select orderid, orderdetailsid, null as quantity, null as quality, null as description
from table1
或者,您的意图可能是一个左连接
:
select t1.orderid, t1.orderdetailsid, t2.quantity, t3.quality, t2.description
from table1 t1
left join table2 t2 on t2.orderdetailsid = t1.orderdetailsid
在创建视图期间使用
外部联接
,例如
CREATE OR REPLACE VIEW v_t12 AS
SELECT t1.orderid, t1.orderdetailid AS orderdetailid1,
t2.orderdetailid AS orderdetailid2, t2.quantity, t2.quality, t2.description
FROM table2 t2
RIGHT JOIN table1 t1
ON t2.OrderDetailID = t1.OrderDetailID;
或
CREATE OR REPLACE VIEW v_t12 AS
SELECT t1.orderid, t1.orderdetailid AS orderdetailid1,
t2.orderdetailid AS orderdetailid2, t2.quantity, t2.quality, t2.description
FROM table1 t1
LEFT JOIN table2 t2
ON t2.OrderDetailID = t1.OrderDetailID;
然后,每当发出包含FOR UPDATE
子句的查询时,您将得到ORA-01445:Cannot Select ROWID from Join View without the Key Preserved Table
error,例如
SELECT *
FROM v_t12 t
FOR UPDATE
然后将主键添加到第一个表中,例如
ALTER TABLE TABLE1
ADD CONSTRAINT PK_ORD_ID_DET_ID PRIMARY KEY (ORDERDETAILID, ORDERID);
ALTER TABLE TABLE2
ADD CONSTRAINT PK_ORD_DET_ID UNIQUE (ORDERDETAILID)
和
然后将唯一键添加到第二个表中,例如
ALTER TABLE TABLE1
ADD CONSTRAINT PK_ORD_ID_DET_ID PRIMARY KEY (ORDERDETAILID, ORDERID);
ALTER TABLE TABLE2
ADD CONSTRAINT PK_ORD_DET_ID UNIQUE (ORDERDETAILID)
为了避免错误。SQL Server或Oracle?你到底在用什么?您部分引用的错误来自哪里?产生该错误的尝试是什么?无行与具有
NULL
值的单行之间存在差异。哪一个实际代表了数据?