1. SQL / Говнокод #3691

    −864

    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
    Гавнокод --
    
    SELECT * FROM  Table1
    WHERE [Id] not in 
    		(
    		SELECT min([Id]) FROM Table1
    		WHERE [Code] in 
    				(
    				SELECT [Code] FROM Table1
    				GROUP BY [Code]									HAVING count([Code]) > 1
    				)
    					GROUP BY [Code]
    		)
    	and [Id] in 
    		(
    				SELECT [Id] FROM Table1
    				WHERE [Code] in (
    						SELECT [Code] FROM Table1
    						GROUP BY [Code]
    						HAVING count([Code]) > 1
    						)
    		)
    
    
    Нормальний варіант --
    
    SELECT * FROM Table1 AS a
    WHERE [Id] not in 
    		(
    			SELECT min([Id]) FROM a_ListParam
    			WHERE a_ListParam.[Code] = a.[Code]
    		)

    O_O, 12 Июля 2010

    Комментарии (5)
  2. SQL / Говнокод #3615

    −858

    1. 1
    IF ((SELECT 1 FROM DELETED AS D INNER JOIN INSERTED AS I ON (I.[id_Status]=D.[id_Status])) IS NULL )

    такий от тригер стоїть на апдейт однієї таблички ...
    ось так -- IF Insertes.id_Status != Deleted.Id_Status було б значно краще і лаконічніше.

    O_O, 01 Июля 2010

    Комментарии (21)
  3. SQL / Говнокод #3611

    −179

    1. 1
    SELECT REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(LTRIM('  850.0000'),'0',' ')),' ','0'),'.',' ')),' ','.')

    Совет, как убрать лишние нули после точки

    Back, 01 Июля 2010

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

    −874

    1. 1
    SELECT created_at, updated_at FROM user_childs WHERE `id`=.......

    убейте меня за таймштамп user_childs.crated_at

    piroman171, 30 Июня 2010

    Комментарии (12)
  5. SQL / Говнокод #3546

    −857

    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
    procedure xxx_procedure
    is
    --   lngIDVidPP Number;
       sSQL       varchar2(4000);
    begin
    sSQL := '';
    sSQL := sSQL || ' Declare ';
    sSQL := sSQL || '    lngIDVidPP Number; ';
    sSQL := sSQL || '    lngColRec  Number; ';
    sSQL := sSQL || '    strTypeProc Varchar2(255); ';
    sSQL := sSQL || ' BEGIN ';
    sSQL := sSQL || ' for rec in (select f.param2 , A.idpp, pp.crastr, pp.cvector, a.param1, a.et, a.tet ';
    sSQL := sSQL || '  from table1 e, T_IDPP@' || 'app' || '_' ||'xxx' || ' a, table2 f, ';
    sSQL := sSQL || '   t_pp_card@' || 'app' || '_' || 'xxx' || ' pp,  refitem r';
    sSQL := sSQL || '  where ';
    sSQL := sSQL || '   e.param1 = a.param1 ';
    sSQL := sSQL || '   and e.id_building = F.ID_BUILDING ';
    sSQL := sSQL || '   and F.FLOOR_NUMBER = a.et ';
    sSQL := sSQL || '   and R.REFERENCEID = 2019 and R.ITEMID = F.ID_FLOOR_TYPE';
    sSQL := sSQL || '   and R.CODE = a.tet';
    sSQL := sSQL || '   and a.idpp = pp.cidpp)';
    sSQL := sSQL || '  loop ';
    sSQL := sSQL || '     lngColRec := 0; ';
    sSQL := sSQL || '     lngIDVidPP := 0; ';
    sSQL := sSQL || '     SELECT COUNT(*) INTO lngColRec FROM T_PROCESS_PP@' || 'app' || '_' || 'xxx || ' Z ';
    sSQL := sSQL || '                     WHERE Z.PPP_UNOM = rec.param1 AND Z.PPP_ET = rec.et AND Z.PPP_TET = rec.tet; ';
    sSQL := sSQL || '     if lngColRec = 0 then ';
    sSQL := sSQL || '        if BITAND(rec.crastr, 8) <> 0 and BITAND(rec.cvector, 8) <> 0 then ';
    sSQL := sSQL || '           lngIDVidPP := 50868; ';
    sSQL := sSQL || '        else ';
    sSQL := sSQL || '           if BITAND(rec.crastr, 8) <> 0 then ';
    sSQL := sSQL || '              lngIDVidPP := 50866; ';
    sSQL := sSQL || '           else ';
    sSQL := sSQL || '              lngIDVidPP := 50867; ';
    sSQL := sSQL || '           end if; ';
    sSQL := sSQL || '        end if; ';
    sSQL := sSQL || '        update table2 f ';
    sSQL := sSQL || '            set f.xx      = rec.idpp, ';
    sSQL := sSQL || '                f.xxx   = lngIDVidPP, ';
    sSQL := sSQL || '                f.xxxx = 54554 ';
    sSQL := sSQL || '          where f.xxxxx = rec.id_floor; ';
    sSQL := sSQL || '     else  '; --if lngColRec > 0 then
    sSQL := sSQL || '          strTypeProc := Null; ';
    sSQL := sSQL || '          SELECT Y.PH_ACTION_KEY INTO strTypeProc ';
    sSQL := sSQL || '            FROM T_PROCESS_HEAD@' || 'app' || '_' || 'SGP' || ' Y ';
    sSQL := sSQL || '            WHERE ';
    sSQL := sSQL || '                 Y.PHID IN (SELECT X.PPP_PHID ';
    ...... 10 строк вырезано из-за ограничения 4000символов
    sSQL := sSQL || '               if BITAND(rec.crastr, 8) <> 0 and BITAND(rec.cvector, 8) <> 0 then ';
    sSQL := sSQL || '                  lngIDVidPP := 50868; ';
    sSQL := sSQL || '               else ';
    sSQL := sSQL || '                  if BITAND(rec.crastr, 8) <> 0 then ';
    sSQL := sSQL || '                     lngIDVidPP := 50866; ';
    sSQL := sSQL || '                  else ';
    sSQL := sSQL || '                     lngIDVidPP := 50867; ';
    sSQL := sSQL || '                  end if; ';
    sSQL := sSQL || '               end if; ';
    sSQL := sSQL || '                  update table3 f ';
    sSQL := sSQL || '                     set f.ID_PLANE_G = rec.idpp, ';
    sSQL := sSQL || '                     f.id_plane_scan = lngIDVidPP, ';
    sSQL := sSQL || '                     f.id_status_plane = 54552 ';
    sSQL := sSQL || '               where f.param1 = rec.param1; ';
    sSQL := sSQL || '           ELSE ';
    sSQL := sSQL || '                  update table3 f ';
    sSQL := sSQL || '                 set f.id_status_plane = 54552 ';
    sSQL := sSQL || '               where f.param1 = rec.param1; ';
    sSQL := sSQL || '           END IF; ';
    sSQL := sSQL || '     end if; ';  --if lngColRec > 0 then
    sSQL := sSQL || '   end loop;';
    sSQL := sSQL || '  null;';
    sSQL := sSQL || '  end;';
    
    EXECUTE IMMEDIATE sSQL;
            dbms_output.put_line ('Процедура xxx_procedure успешно создана');
    EXCEPTION
      WHEN OTHERS THEN dbms_output.put_line('Ошибка создания xxx_procedure. ' || SQLERRM);
    end;

    В связи с NDA названия изменены.

    kamapcuc, 23 Июня 2010

    Комментарии (98)
  6. SQL / Говнокод #3541

    −862

    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
    SELECT wine_name,wine_year,cost FROM Wines 
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN pricelist ON storage.wine_ID=pricelist.wine_ID
    WHERE fabric_ID=(SELECT fabric_ID FROM fabrics WHERE Name="Toscana Italy")
    AND count>0 ORDER BY wine_year ASC LIMIT 1,1000;
    
    SELECT wine_name,cost,count FROM wines
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN vendorprices ON storage.wine_ID=vendorprices.wine_ID
    WHERE count > 0 ORDER BY wine_name DESC LIMIT 1,1000;
    
    SELECT wine_name,cost,count FROM wines
    INNER JOIN storage ON wines.wine_ID=storage.wine_ID
    INNER JOIN vendorprices ON storage.wine_ID=vendorprices.wine_ID
    WHERE count = 0 ORDER BY wine_name DESC LIMIT 1,1000;

    Извращаюсь как могу лишь бы запросы напоминали двух-критериальные. Впрочем таковыми они от этого не становятся. Думаю еще добавить по три-четыре подзапроса и побольше джойнов, жаль условных конструкций не знаю(собственно сутки-двое изучаю SQL)
    Институт сказал "Надо", студент ответил... ну впрочем неважно что ответил, но сделал...

    Ivan0x32, 23 Июня 2010

    Комментарии (14)
  7. SQL / Говнокод #3513

    −857

    1. 1
    2. 2
    SELECT CONCAT( IF(10>DAY(date),"0",""),DAY(date),".",IF(10>MONTH(date),"0",""),MONTH(date)) as date
    FROM table_name

    Выборка дат из mysql в нормальном виде))

    Aligan, 19 Июня 2010

    Комментарии (2)
  8. SQL / Говнокод #3464

    −873

    1. 1
    SELECT users.nick,group.name FROM users,group WHERE user.id='$id' AND group.id=user.group;

    Это мой код. Мне сказали что это говнокод, и порекомендовали спросить здесь.
    В чём именно говнокодость, и как надо писать правильно?

    avamana, 13 Июня 2010

    Комментарии (158)
  9. SQL / Говнокод #3414

    −852

    1. 1
    2. 2
    3. 3
    4. 4
    [CompanyName] text null, 
    [Address] text null, 
    
    [Comment] varchar(255),

    Вот такая оригинальная архитектура таблицы БД :-)

    progr@mer, 08 Июня 2010

    Комментарии (10)
  10. SQL / Говнокод #3390

    −862

    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
    -- находим текущий месяц
    FOR rec IN 
    	SELECT date_part ('month', now()) as ma, date_part ('year', now()) as ya 
    LOOP
    	m1 = rec.ma-1;
    	IF m1=0 THEN m1=12; END IF;
    	Y1 = rec.ya;
    	IF m1=12 THEN Y1 = rec.ya - 1; END IF;
    END LOOP;
    
    FOR rec IN 
    	SELECT count(v.partner_id) as cnt  
    		FROM  v, a where v.id=a.id  and period like '%'||m1||'-'||Y1||' по%' and accepted = 1 and active=1 
    LOOP
    -- вырезано
    -- а десятком строк ниже
    -- находим предыдущие 3 месяца 
    m2 = m1 - 1;	
    IF  m2 = 0 THEN m2 = 12; END IF;
    IF m1<m2  THEN Y2 = Y1 - 1; ELSE Y2 = Y1; END IF;
    m3 = m2 - 1;
    IF m3 = 0 THEN m3 = 12; END IF;
    IF m2<m3 THEN Y3 = Y2 - 1; ELSE Y3 = Y2; END IF;
    m4 = m3 - 1;
    IF  m4 = 0 THEN m4 = 12; END IF;
    IF m3<m4 THEN Y4 = Y3 - 1; ELSE Y4 = Y3; END IF;

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

    qnikst, 03 Июня 2010

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