繁体   English   中英

我如何 select 多行使用多列而不使用多个子查询

[英]How do I select multiple rows using multiple columns without using multiple subqueries

我有以下查询:

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 = ?);

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

您可以使用存在:

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)
             );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM