2013-11-08 3 views
6
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 

заголовки шоу, но данные, отображаемые перекрывается

Я проверил через подобные вопросы, но я, кажется, не понимаю, как решить эту проблему.

+1

изменение «с долей внутреннего присоединиться dealing_Record на» ... Вы присоединились к акции с долей – wxyz

+1

Вы должны указать столбцы, если вы не хотите '' Select * , Поскольку в стороне 'select *' [считается плохой практикой] (http://stackoverflow.com/q/65512/119477). –

ответ

8

У вас есть повторяющиеся столбцы, потому, что вы просите к 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; 
1

Try присоединиться к акции с 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; 
+0

У меня все еще есть дубликаты записей – lee

+0

Вы пытались использовать DISTINCT? сделать тест sql скрипта env, чтобы получить дополнительную помощь – wxyz

Смежные вопросы