SQL INNER JOIN - 根据另一行的值从另一个表中选择数据

Posted

技术标签:

【中文标题】SQL INNER JOIN - 根据另一行的值从另一个表中选择数据【英文标题】:SQL INNER JOIN - Select Data from Another Table based on value on another row 【发布时间】:2016-07-22 22:39:18 【问题描述】:

很难解释我的问题,但我会尽力...

我正在尝试从各种表中构建视图,但我想要两个额外的列“HomeTeamID”和“AwayTeamID”,它们会带来适当的 ID,即使对于该特定事件的其他市场也是如此。

我已附上数据以向您展示我想要实现的目标(电子表格here)

Image data

【问题讨论】:

请以 cutAndPastable 方式添加表格,表格定义等 我看过了。无法从中剪切和粘贴,因此失去了兴趣。对不起。 与其投反对票,不如试试帮助? 我试过了,这就是我在这里的原因:) 我觉得我贴的答案是他需要的 【参考方案1】:

你必须参加2次,

SELECT HomeTeam.ID, AwayTeam.ID from xyz INNER JOIN Team as HomeTeam on Team.ID = HomeTeam.ID INNER JOIN Team as AwayTeam on Team.ID = AwayTeam.ID

【讨论】:

【参考方案2】:

我想我已经知道了,但是遇到了另一个问题。如果我没有在 SELECT 区域中包含 HomeTeamID,则需要 23 秒。当我包含 HomeTeamID 时,我收到以下错误:

'无法为数据库'tempdb'中的对象'dbo.SORT临时运行存储:140737648001024'分配空间,因为'PRIMARY'文件组已满。通过删除不需要的文件、删除文件组中的对象、向文件组添加其他文件或为文件组中的现有文件设置自动增长来创建磁盘空间。 '

Visual Studio 在 Parallels 的 Windows 8.1 中运行,由于限制,我只有 1GB 的备用磁盘空间。这些表本身总共有大约 50,000 条记录(MDF / LDF 文件只有 40MB,所以我很难找出问题所在:/

SELECT DISTINCT
    BetfairEvents.OpenDate AS EventDateTime,
    MarketT.Name AS MarketType, HomeContractT.RunnderID AS HomeTeamID,
    CompetitionsT.Name AS CompetitionName, ContractsT.ID AS ContractID, ContractsT.RunnerID AS SelectionID,
    ContractsT.LayOdds AS Price, ContractsT.LayAvailable AS Available,
    RunnerT.Name AS RunnerName
    FROM BetfairEvents
    INNER JOIN BetfairMarket MarketT ON MarketT.EventID = BetfairEvents.ID
    INNER JOIN BetfairCompetitions CompetitionsT ON CompetitionsT.ID = MarketT.CompetitionID
    INNER JOIN BetfairContract ContractsT ON ContractsT.MarketID = MarketT.ID
    INNER JOIN BetfairRunner RunnerT ON RunnerT.ID = ContractsT.RunnerID
    INNER JOIN BetfairMarketType MarketTypeT ON MarketTypeT.Name = MarketT.Name
    INNER JOIN BetfairMarket HomeMarketT ON MarketT.EventID = BetfairEvents.ID
    INNER JOIN BetfairContract HomeContractT ON HomeContractT.SelectionID = 1

【讨论】:

抱歉,我错过了表格中的内容,团队只是一个两列表:ID 和名称 好吧,您的查询没有问题,这需要时间,因为您正在使用多个连接,这可能会变得很慢......完全规范化的数据库就是这样......阅读速度很慢。 ..

以上是关于SQL INNER JOIN - 根据另一行的值从另一个表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章

根据 INNER JOIN 中的 SESSION 值显示两个不同的值

根据另一列中的值从一列中减去值(SQL)

Oracle SQL INNER Join 基于不匹配的值

使用相同的主键将值从一行添加到另一行 - Oracle SQL

SQL中inner join,outer join和cross join的区别

SQL Left/Inner/Normal Join vs Where while 条件语句