2017-01-02 169 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