2017-06-28 1 views
0

ich eine Tabelle mit der Liste der Mitarbeiter, die Admin sein kann, Entwickler, beide oder keineVenn Operation in SQL-Abfrage

 
EMP_ID IS_ADMIN IS_DEV 
    1  Y   Y 
    2  Y   N 
    3  N   Y 
    4  N   N 

Ich möchte eine Abfrage schreiben, so dass, wenn ich bitten

  1. is_admin = Y liefert 1,2
  2. IS_DEV = Y 1,3
  3. IS_DEV kehrt = Y, Y = is_admin liefert 1,2,3
  4. IS_DEV = N, is_admin = N oder nichts return s 4

Gibt es trotzdem diese Login in einer Abfrage zu integrieren?

+0

Nicht sicher, ob Ihre Logik hier sinnvoll ist. Wenn IS_DEV = Y oder IS_ADMIN = Y 1,2,3 zurückgeben soll, wie kann IS_DEV = N oder IS_ADMIN = N nur 4 zurückgeben? Sollte es nicht 2,3,4 zurückgeben? –

+0

PL/SQL ist die prozedurale Sprache des Oracle DBMS. Verwenden Sie Oracle oder MySQL? –

+0

Ich benutze Oracle. –

Antwort

0

Sie geben alle Optionen als Parameter an, übergeben NULL an alle Parameter, die Sie nicht interessieren, und prüfen, ob NULL als Abfragebedingung vorliegt. Ihre Logik ist ein bisschen so gebogen, dass es für genau programmiert werden müssen, jede Kombination:

SELECT 
    emp_id 
FROM 
    emps 
WHERE 
    (is_admin = 'Y' AND :isadmin = 'Y' AND :isdev is null) 
    OR 
    (is_dev = 'Y' AND :isdev = 'Y' AND :isadmin is null) 
    OR 
    (:isadmin = 'Y' AND :isdev = 'Y' AND (is_admin = 'Y' OR is_dev = 'Y')) 
    OR 
    (COALESCE(:isadmin, 'N') = 'N' AND COALESCE(:isdev, 'N') = 'N' AND is_admin = 'N' AND is_dev = 'N') 

Ihre Berufung Sprache der Wahl der Parameter auf ‚Y‘ gesetzt würde, ‚N‘ oder null, wenn es keine Meinung hatte, z.B in C# für Ihren Fall 1:

sqlCommand.Parameters["isadmin"].Value = "Y"; 
sqlCommand.Parameters["isdev"].Value = DBNull.Value; 
using(var reader = sqlCommand.ExecuteReader()) ....