我認爲這是一個簡單的問題,但我不能完全圍繞答案。在一個數據庫表中,我有一系列位置ID與另一個表中的位置ID相關聯。我想在這些ID之間創建一個明確而不變的鏈接,但ID本身具有不同的值。將MySQL中的數據列與不同的值相關聯
我將如何確保在(例如)BA789或BA8001員工始終與位置代碼CN345(它們是同一物理位置)相關聯。
謝謝,湯姆
我認爲這是一個簡單的問題,但我不能完全圍繞答案。在一個數據庫表中,我有一系列位置ID與另一個表中的位置ID相關聯。我想在這些ID之間創建一個明確而不變的鏈接,但ID本身具有不同的值。將MySQL中的數據列與不同的值相關聯
我將如何確保在(例如)BA789或BA8001員工始終與位置代碼CN345(它們是同一物理位置)相關聯。
謝謝,湯姆
很難說沒有看到實際的表模式和樣本數據,但如果你的表格看起來像
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 |
什麼連接是有這些表之間?請記住,SQL表本質上是無序的,所以在表中不存在自然排序。 –
@tomish瞭解連接。 http://www.w3schools.com/sql/sql_join.asp –
@Sam D不加入要求在每個表中的列有相同的數據? –