我正在使用Oracle通过SQL +命令行,我试图显示来自两个不同表的数据,但我需要使用第三个表来确定要显示的内容。下面是我的样本3表格的图像。基于另一个从两个表中选择数据
堆栈不会让我告诉我的问题,所以这里的图像是一个链接:
我想显示“名称”,“O_ID”和“日期”每个订单。我对SQL很陌生,以前可能已经回答过,但我找不到它。
我正在使用Oracle通过SQL +命令行,我试图显示来自两个不同表的数据,但我需要使用第三个表来确定要显示的内容。下面是我的样本3表格的图像。基于另一个从两个表中选择数据
堆栈不会让我告诉我的问题,所以这里的图像是一个链接:
我想显示“名称”,“O_ID”和“日期”每个订单。我对SQL很陌生,以前可能已经回答过,但我找不到它。
JOIN
表:
SELECT
c.Name,
o.O_ID,
od.Date
FROM Customer AS c
INNER JOIN "Order" AS o ON c.C_ID = o.C_ID
INNER JOIN OrderDate AS od ON o.O_ID = od.O_ID;
你所试图做的是一个非常普遍的做法,需要一个INNER JOIN。 从设计角度来看,订单日期表应该不存在。日期列应该位于订单表中。我写了基于该设计的查询:
SELECT
o.O_ID,
o.Date,
c.Name,
FROM
customer AS c
INNER JOIN order AS o ON c.C_ID = o.C_ID
编辑:
更多关于你的设计的问题:你的数据的自然顺序将有1个日期的顺序,不订单的日期很多。引入另一个表格来简单地存储日期可以让潜在的许多日期与订单相关联,这很简单,不自然。
也许有多个订单日期?也许订单可以添加到。 – 2013-04-09 14:47:33
@samyi听起来更像修订历史,而不是增加订单。在典型的生产环境中,您将使用审计表或类似CDC的东西来实现这一目标,因为它是元数据。 – 2013-04-09 15:00:26
我只是建议你根据你以前看过的东西做出假设。我确实同意你的建议对我更有意义,但每个系统都有自己的一套要求。 – 2013-04-09 19:55:23
做一个JOIN
select c.Name, o.O_ID, od.Date
from Customer c
inner join Order o on o.O_ID = c.C_ID
inner join OrderDate od on o.O_ID = od_ID
这伟大的工作,比较容易的方式比我期待,非常感谢您的帮助! – Vistari 2013-04-09 14:59:24
@ user2262174 - 不客气:) – 2013-04-09 15:11:44
line INNER JOIN“Order”AS o ON c.C_ID = o.O_ID 不应该是 INNER JOIN“Order”AS o ON c.C_ID = o。 C_ID ? – 2013-04-11 12:58:44