sql >> データベース >  >> RDS >> Mysql

SQLクエリ(特にMySQL)の長さの実際的な制限

    クエリを読むと、RPGをプレイしたくなります。

    これは間違いなく長すぎません。うまくフォーマットされている限り、実際の制限は約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. MySQL:フラット/会話メッセージテーブルの最後のメッセージのみを返します

    2. SQL30日より古いすべてのレコードを取得します

    3. 添付ファイルフィールドを持つテーブルの一括挿入または更新

    4. Androidをデータベースに直接接続しないのはなぜですか?