【问题标题】:How do I select multiple rows using multiple columns without using multiple subqueries如何在不使用多个子查询的情况下使用多列选择多行
【发布时间】:2020-09-01 12:29:06
【问题描述】:

我有以下疑问:

SELECT name, modelName, color, rarity, slot, power, chapter
FROM items
WHERE items.id = (SELECT head FROM characterdata WHERE steamid = ?)
OR items.id = (SELECT leftHand FROM characterdata WHERE steamid = ?)
OR items.id = (SELECT rightHand FROM characterdata WHERE steamid = ?)
OR items.id = (SELECT feet FROM characterdata WHERE steamid = ?);

它必须执行四次完全相同的查询,这似乎是不好的做法。我怎样才能重写它,让它只使用两个查询,也就是只需要获取一次字符数据?

【问题讨论】:

    标签: mysql sql optimization query-optimization


    【解决方案1】:

    你可以使用exists:

    SELECT name, modelName, color, rarity, slot, power, chapter
    FROM items i
    WHERE EXISTS (SELECT 1
                  FROM characterdata cd
                  WHERE cd.steamid = ? AND
                        i.id IN (cd.head, cd.leftHand, cd.rightHand, cd.feet)
                 );
    

    这假定? 始终具有相同的值。

    如果不是,你可以这样表达:

    SELECT name, modelName, color, rarity, slot, power, chapter
    FROM items i
    WHERE EXISTS (SELECT 1
                  FROM characterdata cd
                  WHERE (cd.steamid = ? AND i.id = cd.head) OR
                        (cd.steamid = ? AND i.id = cd.leftHand) OR
                        (cd.steamid = ? AND i.id = cd.rightHand) OR
                        (cd.steamid = ? AND i.id = cd.feet)
                 );
    

    【讨论】:

      猜你喜欢
      • 2012-05-06
      • 1970-01-01
      • 2019-10-25
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多