Mysql
 sql >> база данни >  >> RDS >> Mysql

Практически ограничение на дължината на SQL заявката (по-специално MySQL)

Четенето на вашата заявка ме кара да искам да играя ролева игра.

Това определено не е твърде дълго. Стига да са добре форматирани, бих казал, че практическото ограничение е около 100 реда. След това е по-добре да разбиете подзаявките в изгледи, само за да не се пресичат очите ви.

Работил съм с някои заявки, които са над 1000 реда и това е трудно за отстраняване на грешки.

Между другото, мога ли да предложа преформатирана версия? Това е най-вече за демонстриране на важността на форматирането; Вярвам, че това ще бъде по-лесно за разбиране.

select *  
from
  4e_magic_items mi
 ,4e_magic_item_levels mil
 ,4e_monster_sources ms
where mi.id = mil.itemid
  and mi.source = ms.id
  and itemlevel between 1 and 30
  and source not in(16,2,5,13,15,3,4,12,7,14,11,10,8,1,6,9)  
  and type not in(
                  'Arms' ,'Feet' ,'Hands' ,'Head' ,'Neck' ,'Orb' ,
                  'Potion' ,'Ring' ,'Rod' ,'Staff' ,'Symbol' ,'Waist' ,
                  'Wand' ,'Wondrous Item' ,'Alchemical Item' ,'Elixir' ,
                  'Reagent' ,'Whetstone' ,'Other Consumable' ,'Companion' ,
                  'Mount'
                 )
  and ((type != 'Armor') or (false))
  and ((type != 'Weapon') or (false))
order by
  type asc
 ,itemlevel asc
 ,name asc

/*
Some thoughts:
==============
0 - Formatting really matters, in SQL even more than most languages.
1 - consider selecting only the columns you need, not "*"
2 - use of table aliases makes it short & clear ("MI", "MIL" in my example)
3 - joins in the WHERE clause will un-clutter your FROM clause
4 - use NOT IN for long lists
5 - logically, the last two lines can be added to the "type not in" section.
    I'm not sure why you have the "or false", but I'll assume some good reason
    and leave them here.
*/


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да персонализирате вашите MySQL и MariaDB архиви с ClusterControl

  2. mysql:Какъв е правилният синтаксис за NOT LIKE?

  3. Има ли някакъв начин да се вмъкне голяма стойност в mysql DB, без да се променя max_allowed_packet?

  4. Има ли някакви подводни камъни/неща, които трябва да знаете, когато преминавате от MyISAM към InnoDB

  5. QueryException SQLSTATE[HY000] [1045] Достъпът е отказан за потребител 'homestead'@'localhost' (използвайки парола:ДА)