2013-12-16 78 views
0

我認爲這是一個簡單的問題,但我不能完全圍繞答案。在一個數據庫表中,我有一系列位置ID與另一個表中的位置ID相關聯。我想在這些ID之間創建一個明確而不變的鏈接,但ID本身具有不同的值。將MySQL中的數據列與不同的值相關聯

我將如何確保在(例如)BA789或BA8001員工始終與位置代碼CN345(它們是同一物理位置)相關聯。

謝謝,湯姆

+0

什麼連接是有這些表之間?請記住,SQL表本質上是無序的,所以在表中不存在自然排序。 –

+0

@tomish瞭解連接。 http://www.w3schools.com/sql/sql_join.asp –

+0

@Sam D不加入要求在每個表中的列有相同的數據? –

回答

0

很難說沒有看到實際的表模式和樣本數據,但如果你的表格看起來像

CREATE TABLE locations 
(
    location_id VARCHAR(6) PRIMARY KEY 
); 

CREATE TABLE employees 
(
    employee_id INT PRIMARY KEY, 
    location_id VARCHAR(6), 
    FOREIGN KEY (location_id) REFERENCES locations(location_id) 
); 

然後你可以介紹很多一對多映射表位置代碼(IDS)之間

CREATE TABLE location_map 
(
    location_id1 VARCHAR(6), 
    location_id2 VARCHAR(5), 
    FOREIGN KEY (location_id1) REFERENCES locations(location_id), 
    FOREIGN KEY (location_id2) REFERENCES locations(location_id) 
); 

具有以下內容

 
| LOCATION_ID1 | LOCATION_ID2 | 
|--------------|--------------| 
|  BA789 |  CN345 | 
|  BA8001 |  CN345 | 

現在你可以做這樣的事情

SELECT employee_id, location_id, 
     COALESCE(m.location_id2, location_id) mapped_location_id 
    FROM employees e LEFT JOIN location_map m 
    ON e.location_id = m.location_id1; 

輸出示例:

 
| EMPLOYEE_ID | LOCATION_ID | MAPPED_LOCATION_ID | 
|-------------|-------------|--------------------| 
|   1 |  BA789 |    CN345 | 
|   2 |  BA8001 |    CN345 | 
|   3 |  BA9999 |    BA9999 | 
+0

好棒peterm!非常感謝 - 我會在今晚晚些時候嘗試這個實現!湯姆 – tomish

+0

@tomish大:)讓我知道它是如何去。 – peterm

相關問題