【问题标题】:How can i merge joins?我怎样才能合并联接?
【发布时间】:2017-11-17 13:08:48
【问题描述】:

我有以下查询,但我想改进(性能方面):

.sentence_id 和 .project_id 是索引。

我现在的目标是尝试将同一张表上的 2 个连接合并为一个(如果可能) 我该怎么做?

SELECT rs.project_id,
               ms.id AS raw_sentence_id,
               rs.sentence AS raw_sentence_text,
               rs.sentence_id AS raw_sentence_text_id,
               rst.tokens AS tokenization_information,
               ns.sentence_id AS normalized_sentence_id,
               ns.sentence AS normalized_sentence_text,
               nst.token_indices
          FROM manual_sentences ms
          JOIN sentences rs ON (ms.original_sentence_id = rs.sentence_id AND rs.project_id = 623483)
     LEFT JOIN sentence_tokens rst ON (ms.original_sentence_id = rst.sentence_id AND rst.project_id = 623483)
          JOIN sentences ns ON (ms.sentence_id = ns.sentence_id AND ns.project_id = 623483)
     LEFT JOIN sentence_tokens nst ON (ms.sentence_id = nst.sentence_id AND nst.project_id = 623483)
     WHERE ms.project_id = 623483

【问题讨论】:

    标签: mysql join left-join


    【解决方案1】:

    你应该可以使用连词来做到这一点:

    SELECT rs.project_id,
                   ms.id AS raw_sentence_id,
                   rs.sentence AS raw_sentence_text,
                   rs.sentence_id AS raw_sentence_text_id,
                   rst.tokens AS tokenization_information,
                   ns.sentence_id AS normalized_sentence_id,
                   ns.sentence AS normalized_sentence_text,
                   nst.token_indices
              FROM manual_sentences ms
              JOIN sentences rs ON (ms.original_sentence_id = rs.sentence_id AND rs.project_id = 623483)
         LEFT JOIN sentence_tokens rst ON (ms.original_sentence_id = rst.sentence_id AND ms.sentence_id = rst.sentence_id AND rst.project_id = 623483)
              JOIN sentences ns ON (ms.sentence_id = ns.sentence_id AND ns.project_id = 623483)
         WHERE ms.project_id = 623483
    

    【讨论】:

    • ms.original_sentence_id 和 ms.sentence_id 可以不同。当他们在时,我需要来自 2 个单独行的信息
    • 那么在这种情况下,我认为您将需要两个联接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-28
    相关资源
    最近更新 更多