このクエリは、 3つのルックアップテーブルls、lo、およびldを使用して、1つのプライマリテーブルm、3つのセカンダリテーブルs、o、およびdから必要な結果を取得しますが、すべてのテーブルに対してすべてのフィールドに対して1回クエリを実行します。
SELECT m.id,
(SELECT GROUP_CONCAT(s.field1 SEPARATOR ', ')
FROM s, ls
WHERE ls.mid=m.id AND ls.sid=s.id)
AS s_field,
(SELECT GROUP_CONCAT(o.field1 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field1,
(SELECT GROUP_CONCAT(o.field2 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field2,
(SELECT GROUP_CONCAT(o.field3 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field3,
(SELECT GROUP_CONCAT(o.field4 SEPARATOR ', ')
FROM o, lo
WHERE lo.mid=m.id AND lo.oid=o.id)
AS o_field4,
(SELECT GROUP_CONCAT(d.field1 SEPARATOR ', ')
FROM d, ld
WHERE ld.mid=m.id AND ld.did=d.id)
AS d_field1,
(SELECT GROUP_CONCAT(d.field2 SEPARATOR ', ')
FROM d, ld
WHERE ld.mid=m.id AND ld.did=d.id)
AS d_field2
FROM m
WHERE m.id=22 GROUP BY m.id
同じ結果を得るように書き直すにはどうすればよいですか。ただし、テーブルごとに1つのサブクエリしかありません。