King^Lully: profikorrekte Lösung mit nur einem JOIN, nur einer ...

Beitrag lesen

Also, hier eine profikorrekte Lösung mit nur einem JOIN, nur einer Unterabfrage und mit UNION ohne ALL.

  
SELECT  
 Betreiber_GUID,  
 Betreiber_Unternehmen_Kennung,  
 Unternehmen_GUID,  
 Unternehmen_Name  
FROM  
 (  
 SELECT  
  Betreiber_GUID,  
  Betreiber_Netz_Unternehmen_GUID AS Betreiber_Unternehmen_GUID,  
  'Netz' AS Betreiber_Unternehmen_Kennung  
 FROM  
  Betreiber  
 UNION SELECT  
  Betreiber_GUID,  
  Betreiber_Ka_Unternehmen_GUID AS Betreiber_Unternehmen_GUID,  
  'Ka' AS Betreiber_Unternehmen_Kennung  
 FROM  
  Betreiber  
 UNION SELECT  
  Betreiber_GUID,  
  Betreiber_Strom_Unternehmen_GUID AS Betreiber_Unternehmen_GUID,  
  'Strom' AS Betreiber_Unternehmen_Kennung  
 FROM  
  Betreiber  
 UNION SELECT  
  Betreiber_GUID,  
  Betreiber_Wasser_Unternehmen_GUID AS Betreiber_Unternehmen_GUID,  
  'Wasser' AS Betreiber_Unternehmen_Kennung  
 FROM  
  Betreiber  
 ) Temp  
INNER JOIN  
 Unternehmen ON (Unternehmen_GUID = Betreiber_Unternehmen_GUID)  
ORDER BY  
 Betreiber_GUID ASC,  
 Betreiber_Unternehmen_Kennung ASC  

Unterstelltes Tabellendesign:
CREATE TABLE [Betreiber] (
 [Betreiber_GUID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Betreiber_Betreiber_GUID] DEFAULT (newid()),
 [Betreiber_Netz_Unternehmen_GUID] [uniqueidentifier] NOT NULL ,
 [Betreiber_Ka_Unternehmen_GUID] [uniqueidentifier] NOT NULL ,
 [Betreiber_Strom_Unternehmen_GUID] [uniqueidentifier] NOT NULL ,
 [Betreiber_Wasser_Unternehmen_GUID] [uniqueidentifier] NOT NULL ,
 CONSTRAINT [PK_Betreiber] PRIMARY KEY  CLUSTERED
 (
  [Betreiber_GUID]
 )  ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [Unternehmen] (
 [Unternehmen_GUID] [uniqueidentifier] NOT NULL CONSTRAINT [DF_Unternehmen_Unternehmen_GUID] DEFAULT (newid()),
 [Unternehmen_Name] [nvarchar] (50) COLLATE Latin1_General_CI_AS NOT NULL ,
 CONSTRAINT [PK_Unternehmen] PRIMARY KEY  CLUSTERED
 (
  [Unternehmen_GUID]
 )  ON [PRIMARY]
) ON [PRIMARY]

"Designt for" MS SQL Server, sollte/könnte in abgewandelter Form auch auf MySQL laufen (uniqueidentifier durch int ersetzen).