在处理多个表时,可能会遇到需要从其中选择多列的情况子查询。然而,当子表中存在缺失记录时,简单的连接可能无法产生预期的结果。
解决这个问题的关键在于理解表可以从两个物理表派生出来和子查询。通过利用这个概念,可以从单个子查询中检索多个列。
考虑以下示例:
SELECT a.attr, b.id, b.trans, b.lang FROM attribute a JOIN ( SELECT at.id AS id, at.translation AS trans, at.language AS lang, a.attribute FROM attributeTranslation at ) b ON (a.id = b.attribute AND b.lang = 1)
在此示例中,子查询生成一个虚拟表 b,其中包含所需的列。通过将此虚拟表与主表 a 连接,我们可以在单个查询中检索所有必要的数据。
可以进一步扩展该技术以包括汇总表或分组表。例如,以下查询生成一个虚拟表 c,其中包含每个属性的翻译计数:
SELECT a.attr, b.id, b.trans, b.lang, c.langcount FROM attribute a JOIN ( SELECT at.id AS id, at.translation AS trans, at.language AS lang, at.attribute FROM attributeTranslation at ) b ON (a.id = b.attribute AND b.lang = 1) JOIN ( SELECT count(*) AS langcount, at.attribute FROM attributeTranslation at GROUP BY at.attribute ) c ON (a.id = c.attribute)
此查询返回所需的列以及每个属性的翻译计数。
虽然此技术提供了灵活性,但应考虑性能。 MySQL优化器能够合并相似的子查询,但建议避免过度使用子查询并优化查询以提高效率。在某些情况下,连接多个表可能是更有效的选择。
以上是如何从 MySQL 中的单个子查询中选择多个列?的详细内容。更多信息请关注PHP中文网其他相关文章!