2017-01-02 137 views
1

我有一个MySQL表1,并希望创建一个简单的UNION与表2:MYSQL联盟使用

SELECT SomeField FROM Table1 
UNION 
SELECT SomeField FROM Table2; 

我已经表1中创建,如果我手动创建表2其正常工作预期(即使当表2是空的时)。现在在服务器(和其他共同开发者计算机)上已经创建了Table1,但没有Table2。如果我推送更改,应用程序将崩溃,因为Table2不存在,并且有人需要手动修复它。

现在我该如何编写一个优雅的查询(或其他替代方法),该方法是否使用不存在(尚未)的表的UNION?

+2

首先运行一个查询来创建表2 – jophab

+0

总之 - 应用程序非常复杂,我的例子实际上处理域。所以如果查询失败,应用程序将变得不可用。我知道这不是最好的答案,但我们不要深入细节 - 这个选项不可用。 – pakalbekim

+0

首先检查表是否存在,然后在有或没有工会的情况下运行查询 –

回答

1

答案很简单:

您无法查询到不存在的表

但如果你努力工作,在团队(我从你的I push changes假设)

然后DB的变化( CREATE TABLE)应该是你的一部分

另一种选择是使用不同的查询di不同版本的应用程序。我不知道你用什么语言,但在PHP中前可能是这样的:

if (APP_VER > '1.0') { 
    $query = "SELECT SomeField FROM Table1 
      UNION 
      SELECT SomeField FROM Table2"; 
} else { 
    $query = "SELECT SomeField FROM Table1"; 
} 

也许还有其他的解决方案,但因为你不想去的细节更深我想没有人会尝试帮你。这是非常错误的行为:请求帮助,但没有关于您的需求的细节。

+0

谢谢,亚历克斯!这部分回答了我的问题 - 无法查询不存在的表。有没有办法检查它们是否存在并在同一个查询中使用它? 对不起,没有提供更多的细节,但如果我试图解释整个系统架构,这将是一个非常非常长的文本,试图调解人们厌倦阅读和有足够的信息。 与APP版本的想法确实很好,但是尚未在我们的应用程序中实现。 推送php代码和mysql迁移,但它必须手动运行:/ – pakalbekim

+0

检查在这里:http://stackoverflow.com/questions/24138787/mysql-ignore-query-if-table-not-exist – Alex

+0

并顺便启动APP版本控制非常简单。你只需设置新的常量,到目前为止,只有在这种特殊情况下才会使用它。但稍后其他开发人员可以将其用于其他原因。这是解决应用程序的不同分支/变体/版本之间的许多可能问题的非常简单而有效的方法。 – Alex