web-dev-qa-db-ja.com

内部結合を使用して列を複製する

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

ヘッダーは表示されますが、表示されるデータは重複しています

同様の質問を確認しましたが、これを解決する方法がわかりません。

10
lee

列が重複しているのは、同じデータを表示する列を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;
10
Alberto Solano

共有ではなく、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;
1
wxyz