sql >> Databáze >  >> RDS >> Mysql

MYSQL:Vyhýbání se kartézskému součinu opakujících se záznamů při samospojování

select a_numbered.id, a_numbered.identifier, b_numbered.id from 
(
select a.*,
       case 
          when @identifier = a.identifier then @rownum := @rownum + 1
          else @rownum := 1
       end as rn,
       @identifier := a.identifier
  from a
  join (select @rownum := 0, @identifier := null) r
order by a.identifier

) a_numbered join (
select b.*,
       case 
          when @identifier = b.identifier then @rownum := @rownum + 1
          else @rownum := 1
       end as rn,
       @identifier := b.identifier
  from b
  join (select @rownum := 0, @identifier := null) r
order by b.identifier

) b_numbered 
on a_numbered.rn=b_numbered.rn and a_numbered.identifier=b_numbered.identifier



  1. Vraťte informace o verzi operačního systému na SQL Server pomocí zobrazení dynamické správy sys.dm_os_host_info

  2. Proč java.sql.DriverManager.getConnection(...) visí?

  3. PL/SQL - Použijte proměnnou seznamu v klauzuli Where In

  4. SEC_CASE_SENSITIVE_LOGON Zastaráno v 12c