2016-12-06 61 views
-1

我在一個多執行查詢JOIN表:MySQL的 - 在查詢後刪除冗餘字段

SELECT TableA.*, 
     TableB.Data    as Data_B, 
     TableC.Data    as Data_C, 
     TableD.Data    as Data_D, 
     TableE.* 
FROM TableA  JOIN TableB   ON TableB.ID = TableA.ID 
       JOIN TableC   ON TableC.ID = TableB.ID 
       JOIN TableD   ON TableD.ID = TableC.ID 
       JOIN TableE   ON TableE.ID = TableA.ID 
WHERE DataToFind = '$SubmittedData' 

它的工作好,但由於表A是主表和TableE是關聯到多個子表TableA通過鍵ID,當我在TableA字段上執行搜索時,我得到與TableE記錄一樣多的TableA的重複行。

因爲我想只有DISTINCT後,我已經完成我的搜索,我的理想的查詢應該是:

SELECT DISTINCT ID FROM 
(
SELECT TableA.*, 
     TableB.Data    as Data_B, 
     TableC.Data    as Data_C, 
     TableD.Data    as Data_D, 
     TableE.* 
FROM TableA  JOIN TableB   ON TableB.ID = TableA.ID 
       JOIN TableC   ON TableC.ID = TableB.ID 
       JOIN TableD   ON TableD.ID = TableC.ID 
       JOIN TableE   ON TableE.ID = TableA.ID 
WHERE DataToFind = '$SubmittedData' 
) 
WHERE ID IS NOT NULL 

但它不工作,因爲我得到「意外的標記」等語法錯誤。

你能幫我找到它應該如何正確格式化?

p.s.我不在乎我是否會丟失一些TableE記錄,因爲我可以在需要時使用找到的ID來恢復它們。

+0

與php的關係是什麼?這裏只有mysql和一個變量,我們不知道它是如何分配的。 –

+0

這個問題與PHP沒有關聯,它只是一個隨機變量作爲例子。重點應該只在MySQL上。 – Singee

+0

請不要mistag;我在編輯中刪除了它。 –

回答

0

您的查詢完好。它只是缺少子查詢表的別名一樣

SELECT DISTINCT ID FROM 
(
    SELECT tableA.*, 
      TableB.Data    as Data_B, 
      TableC.Data    as Data_C, 
      TableD.Data    as Data_D 
      TableE.* 
    FROM tableA  JOIN tableB   ON tableB.ID = tableA.ID 
        JOIN tableC   ON tableC.ID = tableB.ID 
        JOIN tableD   ON tableD.ID = tableC.ID 
        JOIN tableE   ON tableE.ID = tableA.ID 
    WHERE DataToFound = '$SubmittedData' 
) xxx   <-- missing 
WHERE ProcedureID IS NOT NULL 
1

如果你想不同的ID,然後把所有的在一個單一的select語句:

SELECT DISTINCT TableA.ID 
FROM TableA JOIN 
    TableB 
    ON TableB.ID = TableA.ID JOIN 
    TableC 
    ON TableC.ID = TableB.ID JOIN 
    TableD 
    ON TableD.ID = TableC.ID JOIN 
    TableE 
    ON TableE.ID = TableA.ID 
WHERE DataToFind = '$SubmittedData'; 

你的版本有問題,因爲有兩個子查詢中名爲ID的列。這會產生另一個錯誤。