2016-05-15 59 views
1

如果我有具有相似結構(具有相同列)但具有不同信息的表,我可以在簡單的MySQl查詢(SELECT * FROM table where Name="Boo";)的相同輸出中檢索它的數據嗎?從簡單輸出的多個表中檢索數據

例:

SELECT * FROM Weapon, Armor, Helm, Bomb, Potion where Name="Boo"; 

RESULT

ID Name Position.X Position.Y  Item  TableName 
    23 Boo  3    0   Gun  (Weapon) 
    11 Boo  2    1   Cloth  (Armor) 
    74 Boo  0    4   Tunic  (Armor) 
    119 Boo  7    5   Coif  (Helm) 
    9  Boo  1    6   Crown  (Helm) 
    81 Boo  3    2   Grenade (Bomb) 
    44 Boo  8    1   Grenade (Bomb) 
    32 Boo  0    6   Small  (Potion) 
    98 Boo  6    4   Big  (Potion) 

我有一個系統的一組表(如8),其在某些情況下,具有完全相同的結構,而在其他的它略有不同(一個或兩個不同的列)。

每個表存儲有關用戶項目的信息以及它們的存儲位置。我試過INNER JOIN,但它弄亂了結果。

+1

「*具有相似結構(具有相同列)的表」*「 - 這通常表示違反[正交設計原理] (https://en.wikipedia.org/wiki/Principle_of_orthogonal_design)。 **不要這樣做**(沒有很好的理由)。 – eggyal

+0

看起來像你需要一個工會 – Jens

+0

@eggyal,我不認爲它違反了這個原則。我的意思是,用於遊戲的結構是什麼?你有多種物品類型(盔甲,武器,藥水等),對於每種物品類型你都有另外一個物品分級清單(小武器,中型武器,大型武器等),那麼你就擁有了這些玩家。你將如何存儲所有這些信息?用戶清單?我已經看到了兩種方式:一種具有用於存儲每種物品類型(武器,藥水等)的單獨表格;另一個庫存表格存儲十六進制值的項目(FF0020311ABB248912)。 –

回答

1

如果Weapon, Armor, Helm, Bomb, Potion都相同結構的表可以使用聯盟

SELECT * FROM Weapon where Name="Boo" 
    union 
    SELECT * FROM Armor where Name="Boo"   
    union 
    SELECT * FROM Helm where Name="Boo"  
    union 
    SELECT * FROM Bomb where Name="Boo"  
    union 
    SELECT * FROM Potion where Name="Boo" ;  

否則,您可以設置適當的列名稱爲每個選擇。 在聯合條款中,列必須是相同類型,並且編號相同

+0

@RafaelVidal ...但看到eggyal的評論以上 – Strawberry

+0

Coluld是原來的問題是不是在正確的正常形式,但...關於有回收數據的OP問題....是的是...檢查正確的數據設計.. – scaisEdge

+0

@scaisEdge,我如何適應不同列的表格?假設護甲和頭盔有相同的列,但藥水有一個額外的列。如果列中不存在該表,我是否仍然可以檢索所有表中的所有列,並將其留空?它能顯示哪一行是哪一行? –