sql >> Database >  >> RDS >> Sqlserver

Voorwaardelijke JOIN-instructie SQL Server

Ik denk dat wat je vraagt ​​zal werken door deel te nemen aan de Initial tabel naar beide Option_A en Option_B met behulp van LEFT JOIN , wat zoiets als dit oplevert:

Initial LEFT JOIN Option_A LEFT JOIN NULL
OR
Initial LEFT JOIN NULL LEFT JOIN Option_B

Voorbeeldcode:

SELECT i.*, COALESCE(a.id, b.id) as Option_Id, COALESCE(a.name, b.name) as Option_Name
FROM Initial_Table i
LEFT JOIN Option_A_Table a ON a.initial_id = i.id AND i.special_value = 1234
LEFT JOIN Option_B_Table b ON b.initial_id = i.id AND i.special_value <> 1234

Als je dit eenmaal hebt gedaan, 'negeer' je de set NULLS. De extra truc hier zit in de SELECT-regel, waar u moet beslissen wat u met de NULL-velden wilt doen. Als de tabellen Option_A en Option_B vergelijkbaar zijn, kunt u de COALESCE gebruiken functie om de eerste NON NULL-waarde te retourneren (zoals in het voorbeeld).

De andere optie is dat je gewoon de Option_A-velden en de Option_B-velden moet vermelden, en laat wat de ResultSet gebruikt om te bepalen welke velden moeten worden gebruikt.



  1. MongoDB Basics:Role-Based Access Control (RBAC) configureren

  2. 6 manieren om dubbele rijen met een primaire sleutel in SQLite te verwijderen

  3. SQLite DATEADD() Equivalent

  4. Interne SQL Server:problematische operators Pt. Ik – Scans