Est-ce qu'un FULL OUTER JOIN est nécessaire pour cette situation?

J'essaie de find une alternative à l'utilisation d'un FULL OUTER JOIN pour une procédure stockée que j'écris. Voici le scénario.

Deux arrays de données principalement non liées représentant les events qui doivent se produire. Les events doivent être traités dans l'ordre chronologique et les deux tables ont une colonne datetime. Je dois donc get une seule table qui agit comme une list de TOUS ces events commandés par datetime (ces deux colonnes datetime doivent être mélangées).

Un petit accroc: parfois les events des deux tables seront liés, et dans ce cas, l'événement du tableau A doit passer en premier quel que soit le datetime. Donc, si A a 3 events, et B a 3 events, mais qu'il y a une seule paire apparentée entre A et B, je veux returnner 5 lignes. Dans le cas où il y a des données non liées, il y aura des données NULL (et c'est correct, j'utilise des vérifications de données NULL pour déterminer ce qu'il faut faire ensuite, par exemple l'événement de process A ou B, etc.)

Actuellement ce que j'ai ressemble à ceci:

SELECT CASE WHEN A.EventDateTime IS NULL THEN B.EventDateTime ELSE A.EventDateTime END AS SortDateTime, A.EventId, B.EventId, FROM A FULL OUTER JOIN B ON A.RelatedData=B.RelatedData ORDER BY SortDateTime 

Cela devrait être bien

également au lieu d'utiliser CASE

  CASE WHEN A.EventDateTime IS NULL THEN B.EventDateTime ELSE A.EventDateTime END AS SortDateTime, 

tu peux le faire

 COALESCE(A.EventDateTime,B.EventDateTime) AS SortDateTime, 

Lequel est un peu plus court

Si vous voulez vraiment éviter l'OUTER JOIN, vous pouvez essayer

 SELECT A.EventDateTime, A.EventID FROM A UNION ALL SELECT B.EventDateTime, B.EventID FROM B WHERE B.RelatedData NOT IN (SELECT RelatedData FROM A) 

Le NOT IN ci-dessus peut être écrit comme NOT EXISTS SELECT 1 FROM A WHERE A.RelatedData = B.RelatedData ou comme LEFT JOIN ... IS NULL si votre SGBDR a des preferences (ou si la sous-requête corrélée est meilleure pour votre set de données) .

S'il n'y a pas de relation exacte entre les deux, je ne vois pas d'autre moyen de le faire.