如何在不使用多个子查询的情况下使用多列选择多行
Posted
技术标签:
【中文标题】如何在不使用多个子查询的情况下使用多列选择多行【英文标题】: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 = ?);
它必须执行四次完全相同的查询,这似乎是不好的做法。我怎样才能重写它,让它只使用两个查询,也就是只需要获取一次字符数据?
【问题讨论】:
【参考方案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)
);
【讨论】:
以上是关于如何在不使用多个子查询的情况下使用多列选择多行的主要内容,如果未能解决你的问题,请参考以下文章
Python QTableView |如何在不按住 Ctrl 的情况下通过单击选择多行?