Mysql 将查询合并到子查询中

Mysql 将查询合并到子查询中,mysql,sql,Mysql,Sql,我有两个连接在运行,做同样的事情(从导航链接表中获取信息,动态地向导航栏添加标题)。目前我正在计算,如果需要添加超过2个nav链接,这意味着在这行中会更加头疼,我不想继续为每个select语句添加一个联合 SELECT header_title FROM navlinks INNER JOIN who_we_are ON navlinks.id = who_we_are.navlinkid UNION SELECT header_title from navlinks INNER JOIN

我有两个连接在运行,做同样的事情(从导航链接表中获取信息,动态地向导航栏添加标题)。目前我正在计算,如果需要添加超过2个nav链接,这意味着在这行中会更加头疼,我不想继续为每个select语句添加一个联合

SELECT header_title
FROM navlinks 
INNER JOIN who_we_are ON navlinks.id = who_we_are.navlinkid
UNION
SELECT header_title 
from navlinks 
INNER JOIN contactpage ON navlinks.id = contactpage.navlinks_id

您可以尝试使用
左连接
合并
功能

SELECT distinct coalesce(who_we_are.header_title,contactpage.header_title,null)
FROM navlinks 
LEFT JOIN who_we_are ON navlinks.id = who_we_are.navlinks_id
LEFT JOIN contactpage ON navlinks.id = contactpage.navlinks_id
WHERE coalesce(who_we_are.header_title,contactpage.header_title,null) is not null

SQLFIDLE:

或者您为每个导航栏添加了一个UNION,或者您为每个导航栏添加了一个新的子查询有什么区别?标题从何而来?看起来您不需要工会,但需要一个简单的存在检查。标题栏标题来自contactpage和who we is表,这两个表都有一个名为“header_title”的字段。我的意思是,我99%肯定会有更好的方法来实现这一点,但这是我唯一能想到的制作动态导航栏的方法。我应该提到它运行的是mysql。对我来说,表结构似乎是错误的/未规范化的。每一页有单独的表格吗?那么,如果您添加一个What_we_do页面,您将拥有一个新表?这不是RDBMS的工作方式。这似乎更像是一个NOSQL结构。“SitePage”应该是表,在其中列出所有属性数据和页面,然后根据需要链接到具有不同详细信息的表。我们是谁和联系人页面的结构是什么?所以,是的,你是对的,一个新的联盟会很烦人;但考虑到目前的RDBMS结构,我认为你必须这么做。公平地说,该网站可能需要重构。要为每个新页面添加一个表似乎有点烦人。这是我第一次尝试做一些同样具有可扩展性的东西,所以我有点力不从心。不管怎样,谢谢你的建议,我会去想一想的。谢谢你,我会给你一个惊喜。我有一个想法,但是否有某种方法可以进入信息模式数据并从某个列名获取所有值,从某种意义上讲,这会更容易,并且允许使用这样的用例:如果我要创建更多的页面,我就不必返回并向sql子句中添加另一条语句,即使在这里,您也必须为每个新页面/表添加一个新的左连接。