窓を作っては壊していた人のブログ

この謎のブログタイトルの由来を知るものはもういないだろう

SQLite Select句内Select

今まで艦娘の情報を表示させる時

QTableViewとQSqlTableModelを用いていました.

SQL文を使うDatabaseなど全く使ったことがなかったので非常に汚いSQL文を書いていたのですが,

最近になってSelect句内にSelectを挿入できることに気づきました.

以前使っていたSQL文の実行時間よりも短縮できたため今度からはそちらを使おうと思います.

 

例としては

u_shipというテーブルに入手順のID,slot1~4の装備ID,

u_slotitemにslot1~4とのリレーションを持つID,装備の種類を示すID

m_slotitemに装備の種類を示すID,装備の名前

があったとした時に,今まで毎回u_slotitemとm_slotitemの結合をしてu_shipと結合をしていたのですが,

 

select u_ship.id, 

(select m_slotitem.name from m_slotitem join u_slotitem on m_slotitem.id = u_slotitem.item_id where u_ship.slot1 = u_slotitem.id ) as slot1,

(select m_slotitem.name from m_slotitem join u_slotitem on m_slotitem.id = u_slotitem.item_id where u_ship.slot2 = u_slotitem.id ) as slot2,

...

みたいな感じに書けました.

自分では以前使っていや文(発掘できず)よりもわかりやすかったのでこれでいいかなぁと思っているのですが,もっといい書き方があったら教えてください...