用于组合表的 SQL 语法
Posted
技术标签:
【中文标题】用于组合表的 SQL 语法【英文标题】:SQL Syntax to Combine Tables 【发布时间】:2013-10-04 19:06:34 【问题描述】:我有三个 MS Access 表。它们是Income_Statements
、Balance_Sheets
和Cash_Flow_Statements
。这些表都共享相同的主键。它是一个三字段主键,包括Ticker
、[Year]
和Period
。我想在不复制主键字段的情况下组合所有这三个表。我也有一个需要满足的日期标准。我需要显示的记录等于或早于我从名为dtpDateSelection
的DateTimePicker
中选择的日期。
这是我目前所拥有的:
Dim year As String = dtpDateSelection.Value.Year
Dim quarter As String = ((dtpDateSelection.Value.Month - 1) \ 3) + 1
Dim cmd2 As OleDbCommand = New OleDbCommand("SELECT Ticker, [Year], Period, Income_Statements.Net_Income, Balance_Sheets.Total_Assets, Cash_Flow_Statements.Net_Cash_Flow_Operating FROM Income_Statements, Balance_Sheets, Cash_Flow_Statements WHERE Period < 5 AND Period <= #" & quarter & "# AND [Year] <= #" & year & "#", con)
Dim quarterlyReader As OleDbDataReader = cmd2.ExecuteReader()
Dim Quarterly As New DataTable
Quarterly.Load(quarterlyReader)
DataGridViewScreen.DataSource = Quarterly
quarterlyReader.Close()
我的WHERE
语句有问题。我怎样才能做到这一点?
【问题讨论】:
很难知道你在做什么而不看你是如何解析 DateTimePicker 的。但看起来您可能缺少一两个 JOIN。 我可以做这样的事情吗:"SELECT * FROM Income_Statements, Balance_Sheets, Cash_Flow_Statements WHERE Period < 5 AND Period <= #" & quarter & "# AND [Year] <= #" & year & "#"
在某处使用JOIN
声明?
您需要一个JOIN
(即“组合”)并使用这些主键。见玲儿的回答
【参考方案1】:
如何将表格连接在一起并指定所需的字段:
SELECT i.Ticker, i.[Year], i.Period, i.Net_Income,
b.Total_Assets, c.Net_Cash_Flow_Operating
FROM (Income_Statements AS i
INNER JOIN Balance_Sheets AS b
ON (i.Ticker = b.Ticker) AND (i.[Year] = b.[Year]) AND (i.Period = b.Period))
INNER JOIN Cash_Flow_Statements AS c
ON (b.Ticker = c.Ticker) AND (b.[Year] = c.[Year]) AND (b.Period = c.Period)
WHERE i.Period <= #" & quarter & "#
AND i.[Year] <= #" & year & "#"
【讨论】:
效果很好!无论如何要在其中加入 *(从表中选择字段)? 你可以合并任何你想要的字段,如果你想从三个表中提取每个字段,你可以使用SELECT i.*, b.*, c.*
。
这正是我所需要的。再次感谢!【参考方案2】:
您的 WHERE 子句以两种方式处理 Period 列 - 作为一个整数和作为一个日期(这是哈希符号所暗示的),它不能同时是。
【讨论】:
太好了!这清除了第一条错误消息。我得到的另一个是The specified field 'Ticker' could refer to more than one table listed in the FROM clause of your SQL statement.
我该如何解决这个问题?
你至少需要指定哪个表
你需要在它前面加上一个表名来解决歧义,所以 Income_Statements.Ticker 应该可以工作。以上是关于用于组合表的 SQL 语法的主要内容,如果未能解决你的问题,请参考以下文章