1. Лучший говнокод

    В номинации:
    За время:
  2. Python / Говнокод #28398

    −4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    a = float(input())
    b = float(input())
    
    operation = input()
    if operation == '+':
        print(a + b)
    elif operation == '-':
        print(a-b)
    elif operation == '*':
        print(a*b)
    elif operation == '/':
        print (a /b)
    elif operation == 'mod':
        print(a%b)
         if b == 0:
            print ("Деление на 0!")
    elif operation == 'div':
        print(a//b)
    elif operation == 'pow':
        print(a**b)

    Шикарный калькулятор

    rootOtotot, 05 Октября 2022

    Комментарии (4)
  3. PHP / Говнокод #28336

    +1

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    /**
         * @param string $login
         * @return User
         * @throws GuzzleException
         */
        public function getExternalUser(string $login):FreeIpaUser{
            return $this->UserFactory->createUser($login,$this->getUser($login));
        }

    1g0rbm, 16 Августа 2022

    Комментарии (4)
  4. Lua / Говнокод #28288

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    local victim_say={"Конец мне приходит...", "Помираю я... Помоги...", "Браток, помоги!",
    "Аптечку! Дай аптечку!","Врача, батенька.", "Под пулю я попал.", "Я ранен!","Слышь, браток, помоги!","Хана мне приходит","Сегодня не мой день...","Заболел я."}
    local vs=#victim_say
    
    
    local actor_say={"Тебе плохо? Может, врача вызвать?", "Могу дать номер знакомого врача.", "Мда, скорая не успеет.",
    "Не беспокойся, все там будем!","Корми червей, падла.","Умри!","Дойдёшь до больницы?","Извини, я не доктор.","Выкручивайся сам","Мне некогда"}
    local ds=#actor_say	
    
    
    local victim_ans={"Ну и подонок же ты, Меченый.", "Проваливай!", "Обойдусь сам!", "Помощь от тебя была бы хуже смерти. Проваливай!","Я ещё доберусь до тебя!", "Подонок!", "Моя смерть будет на твоей совести.","Встретимся в аду.","Просто уходи.","Я ещё вернусь...","Это ещё не конец."}
    
    local va=#victim_ans
    
    local victim_tnk={"Спасибо! Ты меня спас!", "Благодарю! Признаться, не ожидал.", "Спасибо, Меченый!", "Спасибо за помощь!","Я ещё живой? Это благодаря тебе!", "Ты мой спаситель!", "Моя смерть была бы на твоей совести","Я твой должник!","Ты ждешь благодарности?","На твоем месте я бы тебя пристрелил","Мерси за помощь!"}
    
    local vt=#victim_tnk
    
    	
    function init_intro_dialogb(dlg)
    	local k,v = 0,0
    	local phr = dlg:AddPhrase("","0","",-10000)
    	phr = dlg:AddPhrase("","1","0",-10000)
    	
    	local id=math.random(vs)
    	local ph=dlg:AddPhrase(victim_say[id],"333","1",-10000)
    	local ps = ph:GetPhraseScript()
    	ps:AddPrecondition("dialogs.is_wounded")
    	ph = dlg:AddPhrase("(Лечение)","444","333",-10000)
    	ps = ph:GetPhraseScript()
    	ps:AddAction("doctor.heal")
    	
    	local id=math.random(vt)
    	ph = dlg:AddPhrase(victim_tnk[id],"555","444",-10000)
    	--ps = ph:GetPhraseScript()
    --	ps:AddAction("dialogs.break_dialog")
    
    	
    	
    	
    	local id=math.random(ds)
    	local ph=dlg:AddPhrase(actor_say[id],"666","333",-10000)
    	local id=math.random(va)
    	local ph=dlg:AddPhrase(victim_ans[id],"777","666",-10000)
    
    	
    	
    
    
    	
    	for k,v in pairs(phrase.intro) do
    		phr = dlg:AddPhrase(v.name, v.phr_id, "1", -10000)
    		if phr then
    		
    			
    		
    			local phrase_script = phr:GetPhraseScript()
    			phrase_script:AddPrecondition("dialog_manager.precondition_intro")
    			--' Этот экшн запоминает последнюю фразу, чтобы персонаж говорил одно и то же.
    			--' Для фразы просьбы о помощи его добавлять не надо.
    			if v.wounded == "false" then
    				phrase_script:AddAction("dialog_manager.phrase_action_intro")
    			end
    		end
    	end
    	
    end

    Лечения раненых в Сталкере ТЧН. В диалоге с ранен(н)ым показывается как пункт "вылечить" так и рандомное издевательство, вроде "могу дать номер своего врача"

    CBuHOKYP, 21 Июля 2022

    Комментарии (4)
  5. C++ / Говнокод #28125

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    void remove_spaces(string data)
    { int i=0,j=0;
        while(i<data.length())
        {
            if (isalpha(data[i]))
            {
            data[i]=data[i];
            i++;
            }
            else
                {
                data.erase(i,1);}
        }
        cout<<data;
    }

    kcalbCube, 19 Апреля 2022

    Комментарии (4)
  6. Java / Говнокод #28107

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    import org.springframework.core.Ordered;
       import org.springframework.core.annotation.Order;
       import org.springframework.web.bind.WebDataBinder;
       import org.springframework.web.bind.annotation.ControllerAdvice;
       import org.springframework.web.bind.annotation.InitBinder;
    
       @ControllerAdvice
       @Order(10000)
       public class BinderControllerAdvice {
          @InitBinder
          public void setAllowedFields(WebDataBinder dataBinder) {
    
              String[] denylist = new String[]{"class.", "Class.", ".class.", ".Class."};
    
              dataBinder.setDisallowedFields(denylist);
          }
       }

    Критическая 0-day уязвимость в Spring Framework, применяемом во многих Java-проектах

    Работа эксплоита сводится к отправке запроса с параметрами "class.module.classLoader.resources.cont ext.parent.pipeline.first.*", обработка которых при использовании "WebappClassLoaderBase" приводит к обращению к классу AccessLogValve. Указанный класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл указанного атакующим кода. Созданный файл становится доступным для прямых запросов и может использоваться в качестве web shell. Для атаки на уязвимое приложение в окружении Apache Tomcat достаточно отправить запрос с определёнными параметрами при помощи утилиты curl.

    curl -v -d "class.module.classLoader.resources.context.parent.pipeline
    .first.pattern=код_для_вставки_в_файл
    &class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
    &class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
    &class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar
    &class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat="
    http://localhost:8080/springmvc5-helloworld-exmaple-0.0.1-SNAPSHOT/rapid7

    3_dar, 04 Апреля 2022

    Комментарии (4)
  7. Ruby / Говнокод #28073

    0

    1. 1
    http://mainisusuallyafunction.blogspot.com/2014/02/x86-is-turing-complete-with-no-registers.html

    посмотрите в комменты

    kcalbCube, 06 Марта 2022

    Комментарии (4)
  8. JavaScript / Говнокод #28050

    −2

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    99. 99
    from lib2to3.pgen2 import token
    import logging
    import re
    
    import requests
    import pandas as pd
    
    from bs4 import BeautifulSoup
    
    from aiogram import Bot, Dispatcher, executor, types
    from aiogram.dispatcher.filters import Text
    
    bot = Bot(token="5243563589:AAHZL9JyJ0Q36dBpuXcjgzDuM-0n9OEWhpk")
    dp = Dispatcher(bot)
    logging.basicConfig(level=logging.INFO)
    
    sso = "http://pinskgptklp.brest.by/sso.html"
    pto = "http://pinskgptklp.brest.by/pto2.html"
    logg = ""
    
    response = requests.get(sso)
    soup = BeautifulSoup(response.text, "lxml")
    quotes = soup.find_all("tbody")
    t = str(quotes)
    arr = t.split('</tbody>, ')
    stroka = arr[1]
    stroki = stroka.split('<tr')
    
    i = 1
    j = 0
    
    tablica = [0] 8
    ttt = [[]] 8
    
    tab1 = [0] len(stroki)
    while i < len(tab1):
    j = 0
    tab1 = re.sub(r'\n+', '\n', stroki)
    tab1 = re.sub(r'\<[^>]\>', '', "<" + stroki).split('\n')
    while j < len(tab1):
    if tab1[j] != "" and tab1[j] != "]":
    logg += '|' + tab1[j]
    
    j = j + 1
    
    logg += '~'
    i = i + 1
    
    q = []
    rem = logg.split('~')
    o = 0
    while o < len(rem):
    q.append(rem.split('|'))
    o = o + 1
    
    o = 0
    while o < len(rem):
    o = o + 1
    
    print(q)
    
    sso_sh = q[4][1] + q[4][2] + q[4][3] + q[4][4] + '\n' + q[0][2] + " - " + q[4][5] + '\n' + q[0][3] + " - " + q[4][8]
    sso_p = q[5][1] + q[5][2] + q[5][3] + q[5][4] + '\n' + q[0][2] + " - " + q[5][5] + '\n' + q[0][3] + " - " + q[5][8]
    
    @dp.message_handler(commands="start")
    async def cmd1(message: types.Message):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text="ПТО", callback_data="n1"))
    keyboard.add(types.InlineKeyboardButton(text="CCO", callback_data="n2"))
    await message.answer("Действия:", reply_markup=keyboard)
    
    #@dp.message_handler(Text(equals="Показать что-то"))
    #async def cmd2(message: types.Message):
    #await message.reply(stroki[1])
    
    @dp.callback_query_handler(text="see")
    async def see(call: types.CallbackQuery):
    await call.message.answer("123123123")
    await call.answer()
    
    @dp.callback_query_handler(text="n1")
    async def next(call: types.CallbackQuery):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text=q[4][3], callback_data="pto1"))
    keyboard.add(types.InlineKeyboardButton(text=q[5][3], callback_data="pto2"))
    await call.message.answer("Что именно?", reply_markup=keyboard)
    await call.answer()
    
    @dp.callback_query_handler(text="n2")
    async def next(call: types.CallbackQuery):
    keyboard = types.InlineKeyboardMarkup()
    keyboard.add(types.InlineKeyboardButton(text=q[4][3], callback_data="sso1"))
    keyboard.add(types.InlineKeyboardButton(text=q[5][3], callback_data="sso2"))
    await call.message.answer("Что именно?", reply_markup=keyboard)
    await call.answer()
    
    @dp.callback_query_handler(text="sso1")
    async def next(call: types.CallbackQuery):
    await call.message.answer(sso_sh)

    Саб, нужна помощь с ботом, нужно сделать 2 часть с кнопкой ПТО, а то не получается спарсить

    dddccc, 24 Февраля 2022

    Комментарии (4)
  9. C++ / Говнокод #27995

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    std::vector<Token> Tokenizer::coreTokenize(std::string src)
    {
        const boost::escaped_list_separator<char> els("\\"s, " \n\t"s, "\";");
    
        boost::replace_all(src, "\"", R"("\")");
        boost::replace_all(src, ";", ";\\;");
        boost::replace_all(src, "\\n", "\\\\n");
        boost::replace_all(src, "\n", "\\n");
    
        const boost::tokenizer tok(src, els);
        std::vector<Token> tokens;
    
        std::ranges::copy(tok, std::back_inserter(tokens));
        bool (std::string::*starts_with) (char const) const = &std::string::starts_with;
        std::remove_if(tokens.begin(), tokens.end(), boost::bind(starts_with, boost::placeholders::_1, ';'));
    
        return tokens;
    }

    захотел добавить в свой компилятор подсветку ошибок. пришлось накостылить.

    digitalEugene, 05 Февраля 2022

    Комментарии (4)
  10. Pascal / Говнокод #27977

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    with ZeoDataModule.TmpZQuery do
      begin
        ZeoDataModule.TmpZQuery.Close;
        ZeoDataModule.TmpZQuery.SQL.Clear;
        //ZeoDataModule.TmpZQuery.SQL.Add(ZeoDataModule.zqryOstatki.SQL.Text);
        ZeoDataModule.TmpZQuery.SQL.Add(TZQuery(dbgrdh1.DataSource.DataSet).SQL.Text);
    //    ZeoDataModule.Add ('select  *,''0.00'' as str_cen from material.ostatki_by_skladid(:skladid,:dt) ');
        ZeoDataModule.TmpZQuery.SQL.Add (' and  tovarid in(');
        for i:=0 to OstatkiTovarList.Count-1 do
        begin
          ZeoDataModule.TmpZQuery.SQL.Add(ostatkiTovarList[i]);
          if i< OstatkiTovarList.Count-1 then
            ZeoDataModule.TmpZQuery.SQL.Add(',');
        end;
        ZeoDataModule.TmpZQuery.SQL.Add(')');
        ZeoDataModule.TmpZQuery.SQL.Add('order by nt');
        //-------
        zQ_sv:= DataModulePrint.frxDBDatasetOstatki.DataSet as TZQuery;   // zqryOstatki
        //--------
        ZeoDataModule.zqrySumBySS.Close;
    //    ZeoDataModule.zqrySumBySS.SQL.Add('select :dt,:skladid from material.globalvalues where 1=2'); //  пустой набор
        ZeoDataModule.zqrySumBySS.ParamByName('skladid').Value:=10000;  // несуществующий склад (пустой набор)
        ZeoDataModule.zqrySumBySS.Open;
    
        ZeoDataModule.TmpZQuery.ParamByName('skladid').Value:=zQ_sv.ParamByName('skladid').Value;
        ZeoDataModule.TmpZQuery.ParamByName('dt').AsDate:=zQ_sv.ParamByName('dt').AsDate;
        ZeoDataModule.TmpZQuery.Open;
    
        DataModulePrint.frxDBDatasetOstatki.DataSet := ZeoDataModule.TmpZQuery;
        DataModulePrint.frxDBDatasetSumBySS.DataSet := ZeoDataModule.zqrySumBySS;
        if TypeVed=USUAL_OST then
        begin
          if Material.TypeSkladId = 4 then
            DataModulePrint.ShowReport('ostatki.fr3')
          else
            DataModulePrint.ShowReport('ostatki.fr3')
        end
        else if TypeVed = NO_MOVE_OST then
          DataModulePrint.ShowReport('ostatki_no_move.fr3');
    
        ZeoDataModule.TmpZQuery.Close;
    
        DataModulePrint.frxDBDatasetOstatki.DataSet := zQ_sv;
        ZeoDataModule.zqrySumBySS.Close;
        ZeoDataModule.zqrySumBySS.ParamByName('skladid').Value:=Material.Skladid;
    //    ZeoDataModule.zqrySumBySS.SQL.Clear();
    //    ZeoDataModule.zqrySumBySS.SQL.Add(sqlSum_sv); 
        ZeoDataModule.zqrySumBySS.Open;
      end;

    ZeoDataModule.TmpZQuery.SQL.Add(TZQuery( dbgrdh1.DataSource.DataSet).SQL.Text); - особенно понравилось. Молчу про "with".

    Baiumka, 31 Января 2022

    Комментарии (4)
  11. SQL / Говнокод #27976

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    ttt as (
                        select o.tovarid, o.edizmerid, o.cena, 
                               o.vos, o.cena*o.vos as sum_vos,  
                               coalesce(p.sum_kl,0.0)  as _prih_kl, coalesce( p.sum_prih,0.0) as  sum_prih, 
                               coalesce( p.sum_prih_docs,0.0) as  sum_prih_docs,
                               coalesce(r.sum_kl,0.0) as _rash_kl, coalesce(r.sum_rash,0.0)  as  sum_rash ,
                               coalesce(r.sum_rash_docs,0.0)  as  sum_rash_docs ,
                               coalesce(rd.sum_kl,0.0) as _rash_doc_kl, coalesce(rd.sum_rash_doc,0.0) as sum_rash_doc, 
                               coalesce(rd.sum_rash_doc_docs, 0.0) as sum_rash_doc_docs ,
                     --          coalesce(rs.sum_kl,0.0) as _rash_storno_kl, coalesce(rs.sum_rash,0.0) as sum_rash_storno ,
                               o.ostid, o.ss, o.sb 
                        from ost_ o
                        left join prih p on (o.tovarid = p.tovarid 
                                         and o.edizmerid=p.edizmerid
                                         and o.ss = p.ss
                                         and o.sb = p.sb)   
                        left join rash r on (o.tovarid =r.tovarid 
                                         and o.edizmerid=r.edizmerid
                                         and o.ss = r.ss
                                         and o.sb = r.sb) 
                        left join rash_doc rd on (o.tovarid =rd.tovarid 
                                              and o.edizmerid=rd.edizmerid
                                              and o.ss = rd.ss_
                                              and o.sb = rd.sb_) 
                       -- left join rash_old_072018 ro on (o.tovarid =ro.tovarid 
                                          --    and o.edizmerid=ro.edizmerid) 
                  -- 08.2018     left join rash_storno rs on (o.tovarid =rs.tovarid    and o.edizmerid=rs.edizmerid) 
    --                    where   o.vos+p.sum_kl>0  
                      ),
                    tt as (    
                      select *, ttt.vos + ttt._prih_kl - ttt._rash_kl as ost_fact ,
    --                    case when  (ttt.vos+ttt._prih_kl<>0 )  then
    --                        ( ttt.sum_vos+ttt.sum_prih -ttt.sum_rash_storno)/(ttt.vos+ttt._prih_kl-ttt._rash_storno_kl)
    --                      else ttt.cena end   as new_cen from ttt
              --          case when  (ttt.vos+ttt._prih_kl+ttt._rash_storno_kl-ttt._rash_kl-ttt._rash_doc_kl<>0 )  then
              --              ( ttt.sum_vos+ttt.sum_prih +ttt.sum_rash_storno-ttt.sum_rash-ttt.sum_rash_doc)/(ttt.vos+ttt._prih_kl-ttt._rash_storno_kl-ttt._rash_kl-ttt._rash_doc_kl)
                             case when (ttt.vos+ttt._prih_kl-ttt._rash_kl-ttt._rash_doc_kl<>0 ) then
                               ( ttt.sum_vos+ttt.sum_prih -ttt.sum_rash-ttt.sum_rash_doc)/(ttt.vos+ttt._prih_kl-ttt._rash_kl-ttt._rash_doc_kl)
                             else ttt.cena end as new_cen 
                      from ttt
                    )        
          select tt.tovarid,
                 tt.cena,
                 tt.edizmerid,
                 t.kt,
                 t.nt,
                 tt.vos,
                 round(sum_vos,2), 
                 u.name_u,
                 tt._prih_kl as _prih_kl, 
          --       round( tt.sum_prih,2)  as sum_prih ,
                  tt.sum_prih_docs  as sum_prih ,
                 tt._rash_kl as _rash_kl, 
           --      round( tt.sum_rash,2)  as sum_rash ,
                 tt.sum_rash_docs  as sum_rash ,
                 tt.ost_fact,
    --             round(tt.ost_fact* tt.new_cen,5),
                 round(tt.ost_fact* tt.new_cen,2),
                 t.priz,
                 round(tt.new_cen,5),
                 tt.ostid,
                 tt._rash_doc_kl,
    --             tt.sum_rash_doc,
                 tt.sum_rash_doc_docs,
                 t.dk_2010,
                 coalesce( tt.ss, '0'),
                 coalesce( tt.sb, '0')
              from tt
              left join material.tovar t on (t.tovarid=tt.tovarid)
              left join nsi.units u  on (u.id=tt.edizmerid);

    Называется найди разницу между ttt, tt и t

    Baiumka, 31 Января 2022

    Комментарии (4)