具有内部联接的重复列
Posted
技术标签:
【中文标题】具有内部联接的重复列【英文标题】:Duplicate columns with inner Join 【发布时间】:2013-11-08 15:50:03 【问题描述】:SELECT
dealing_record.*
,shares.*
,transaction_type.*
FROM
shares
INNER JOIN shares ON shares.share_ID = dealing_record.share_id
INNER JOIN transaction_type ON transaction_type.transaction_type_id = dealing_record.transaction_type_id;
上面的 SQL 代码产生了所需的输出,但有几个重复的列。此外,列标题显示不完整。当我改变
linesize 100
标题显示但数据显示重叠p>
我已经检查过类似的问题,但我似乎不知道如何解决这个问题。
【问题讨论】:
更改为'从股票内部加入交易_记录'...您已加入股票与股票 如果您不想使用Select *
,则需要指定列。另外select *
是considered bad practice。
【参考方案1】:
您有重复的列,因为您要求 SQL 引擎提供它们将向您显示相同数据的列(SELECT dealing_record.*
等),然后重复。
例如,transaction_type.transaction_type_id
列和 dealing_record.transaction_type_id
列将具有匹配的行(否则您将看不到带有 INNER JOIN
的任何内容)并且您将看到这些重复。
如果您想避免这个问题,或者至少要降低结果中出现重复的风险,请改进您的查询,只使用您真正需要的列,正如@ConradFrix 已经说过的那样。一个例子是这样的:
SELECT
dealing_record.Name
,shares.ID
,shares.Name
,transaction_type.Name
,transaction_type.ID
FROM
shares
INNER JOIN shares ON shares.share_ID = dealing_record.share_id
INNER JOIN transaction_type ON transaction_type.transaction_type_id = dealing_record.transaction_type_id;
【讨论】:
【参考方案2】:尝试通过 Dealing_record 加入共享,而不是再次共享:
select dealing_record.*,
shares.*,
transaction_type.*
FROM shares inner join dealing_record on shares.share_ID = dealing_record.share_id
inner join transaction_type on transaction_type.transaction_type_id=
dealing_record.transaction_type_id;
【讨论】:
我还有重复记录 您尝试过使用 DISTINCT 吗?制作一个 sql fiddle 测试环境以获得更多帮助以上是关于具有内部联接的重复列的主要内容,如果未能解决你的问题,请参考以下文章