16
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

标题显示但数据显示重叠

我已经检查了类似的问题,但我似乎不知道如何解决这个问题。

4

2 回答 2

20

您有重复的列,因为您要求 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;
于 2013-11-08T16:45:35.190 回答
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;
于 2013-11-08T15:54:37.397 回答