代码之家  ›  专栏  ›  技术社区  ›  Aleksa Ristic

生成复杂的SQL命令

  •  1
  • Aleksa Ristic  · 技术社区  · 6 年前

    我正在使用SQL来执行select、update、insert和其他一些功能,但到目前为止只有简单的功能。现在我需要编写一个复杂的命令。

    我看过用 case 但我不知道如何实现它。

    它应该是这样的:

    SELECT KVIZ_ISTORIJA.ID AS ISTORIJAID, KVIZ_PITANJA.PITANJE1, ~TACNO~
    FROM KVIZ_ISTORIJA 
    INNER JOIN KVIZ_PITANJA ON KVIZ_ISTORIJA.PITANJEID = KVIZ_PITANJA.PITANJEID 
    WHERE REZULTATID = 12
    

    我用过 ~TACNO~ 指出我需要条件值的地方。

    我将如何在C中编写条件如下(我将使用表中的列名称作为变量):

    int ~TACNO~ = -1;
    int I = -1;
    
    if(KVIZ_PITANJA.ODGOVOR1_TACAN == 1)
        I = 1;
    else if(KVIZ_PITANJA.ODGOVOR2_TACAN == 1)
        I = 2;
    else if(KVIZ_PITANJA.ODGOVOR3_TACAN == 1)
        I = 3;
    else if(KVIZ_PITANJA.ODGOVOR4_TACAN == 1)
        I = 4;
    else if(KVIZ_PITANJA.ODGOVOR5_TACAN == 1)
        I = 5;
    
    switch(I)
    {
        case 1:
            if(KVIZ_ISTORIJA.ODGOVORENO1 = 1)
                ~TACNO~ = 1;
           break;
        case 2:
            if(KVIZ_ISTORIJA.ODGOVORENO2 = 1)
                ~TACNO~ = 1;
           break;
        case 3:
            if(KVIZ_ISTORIJA.ODGOVORENO3 = 1)
                ~TACNO~ = 1;
           break;
        case 4:
            if(KVIZ_ISTORIJA.ODGOVORENO4 = 1)
                ~TACNO~ = 1;
           break;
        case 5:
            if(KVIZ_ISTORIJA.ODGOVORENO5 = 1)
                ~TACNO~ = 1;
           break;
    }
    

    如何在SQL查询中编写与此C条件等效的内容?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mark Rotteveel    6 年前

    CASE

    case 
      when (KVIZ_PITANJA.ODGOVOR1_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO1 = 1) then 1
      when (KVIZ_PITANJA.ODGOVOR2_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO2 = 1) then 1
      when (KVIZ_PITANJA.ODGOVOR3_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO3 = 1) then 1
      when (KVIZ_PITANJA.ODGOVOR4_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO4 = 1) then 1
      when (KVIZ_PITANJA.ODGOVOR5_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO5 = 1) then 1
      else -1
    end
    

    when OR

    case 
      when (KVIZ_PITANJA.ODGOVOR1_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO1 = 1)
        or (KVIZ_PITANJA.ODGOVOR2_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO2 = 1)
        or (KVIZ_PITANJA.ODGOVOR3_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO3 = 1)
        or (KVIZ_PITANJA.ODGOVOR4_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO4 = 1)
        or (KVIZ_PITANJA.ODGOVOR5_TACAN = 1 and KVIZ_ISTORIJA.ODGOVORENO5 = 1) then 1
      else -1
    end