4

MS SQL Server では、このクエリは正常に実行されます。

SELECT column1
    , (SELECT RelatedColumn1 FROM tbl_related WHERE record_id=a1.record_id) AS pseudocolumn1
    , (SELECT RelatedColumn2 FROM tbl_related WHERE record_id=a1.record_id) AS pseudocolumn2
    , (SELECT RelatedColumn3 FROM tbl_related WHERE record_id=a1.record_id) AS pseudocolumn3
    , (SELECT RelatedColumn4 FROM tbl_related WHERE record_id=a1.record_id) AS pseudocolumn4
     ... [20 or more subqueries here] ...
FROM tbl_primary a1

ただし、mySQL では、これは非常に遅く実行され、サブクエリを追加するとパフォーマンスが低下し続けます。内部の操作の順序に関係していると確信していますが、私の質問は、このクエリを最適化する方法ですか? 2 番目のテーブルのすべての値を結果セットの列にピボットするにはどうすればよいですか? これが複数の JOIN ステートメントで達成される必要がないことを願っています (私は JOINS をよく理解していないため)...?

4

3 に答える 3

5

LEFT JOIN関連するテーブルにa を使用することをお勧めします。を使用するJOINと、tbl_related にその ID の行がない場合、その行は結果から除外されるためです。

SELECT
    column1,
    tbl_related.RelatedColumn1,
    tbl_related.RelatedColumn2,
    tbl_related.RelatedColumn3,
    tbl_related.RelatedColumn4,
    tbl_related.RelatedColumn5
    .....
FROM
    tbl_primary a1
LEFT JOIN tbl_related 
    ON tbl_related.record_id=a1.record_id

ほら:

SELECT
    (SELECT RelatedColumn1 FROM tbl_related WHERE record_id=a1.record_id) 
    AS pseudocolumn1

将来的に問題を引き起こす可能性があります。サブクエリの 1 つが複数の値を返す場合はどうなりますか? サブクエリが複数の値を返すことができないという例外が発生する可能性があります。したがって、将来このようなサブクエリを実行する予定がある場合。TOP 1クエリがクラッシュしないように、少なくとも を付けてください。このような:

SELECT
    (SELECT TOP 1 RelatedColumn1 FROM tbl_related WHERE record_id=a1.record_id) 
    AS pseudocolumn1
于 2012-04-27T12:05:39.587 に答える
2

SQL 101:

SELECT 
    column1,
    r.RelatedColumn
FROM tbl_primary a1
JOIN tbl_related r
ON r.record_id = a1.recordId
于 2012-04-27T12:04:11.460 に答える
2

JOIN句を使用する必要があります

 SELECT a1.column1,
        rt.RelatedColumn
 FROM tbl_primary a1
 LEFT JOIN tbl_related ON a1.record_id = rt.record_id
于 2012-04-27T12:08:16.477 に答える