Mysql 从WHERE子句的每个条件中仅选择一项

Mysql 从WHERE子句的每个条件中仅选择一项,mysql,sql,limit,Mysql,Sql,Limit,这是我当前的查询: SELECT topic.title, topic.content_id, topic.thumbnail_icon, text.description FROM mps_contents AS topic, mps_contents AS text WHERE topic.featured = '1' AND topic.active = '1' AND topic.page_id = (SELECT page_id

这是我当前的查询:

SELECT 
  topic.title, 
  topic.content_id, 
  topic.thumbnail_icon, 
  text.description 
FROM 
  mps_contents AS topic, 
  mps_contents AS text 
WHERE 
  topic.featured = '1' AND 
  topic.active = '1' AND 
  topic.page_id = (SELECT page_id 
                     FROM mps_pages 
                    WHERE page_short_name = 'services' 
                       OR page_short_name = 'questions_faqs') AND 
  text.section_id = (SELECT section_id 
                       FROM mps_sections 
                      WHERE section_short_name = 'page_text') AND 
  text.page_id = topic.content_id AND 
  topic.resource_type = 'subpage' AND 
  text.resource_type = 'text' 
ORDER BY RAND() LIMIT 2
编辑:
这是MySQL

我真正想做的是从
服务
中选择一个特色项目,从
问题
中选择一个特色项目。但是,此查询将从
服务
问题
中选择2个特色项目


我知道有一种选择是对
联合
的两个查询进行
联合
并执行
限制1
,但这意味着我必须重复90%的查询。我可以不必求助于
UNION
s就可以做到这一点吗?

我相信,除非重新设计/规范化表,否则在某种程度上,您总会重复查询

如果你只想避免联合,你可以重写

  topic.page_id = (SELECT page_id 
                 FROM mps_pages 
                WHERE page_short_name = 'services' 
                   OR page_short_name = 'questions_faqs')


我不认为会有太多的性能提升,尽管我在MySQL中运行了两次rand()

。InnoDB表。这就是“味道”的意思吗?联合就是一个查询;我不知道不使用工会如何得到你想要的东西。哦。。您是对的,但是一个
联合
需要我重复原始查询的90%,只是为了指定一个不同的条件。我在想,如果我能避免那样做,我明白了。在这种情况下,我想我只考虑这个查询的可读性,而不是性能。
topic.page_id = (SELECT page_id 
                 FROM mps_pages 
                 WHERE page_short_name = 'services' ORDER BY RAND() LIMIT 1)
                   OR 
topic.page_id = (SELECT page_id 
                 FROM mps_pages 
                 WHERE page_short_name = 'questions_faqs' ORDER BY RAND() LIMIT 1)