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).