我认为这是一个简单的问题,但我无法完全理解答案。在一个数据库表中,我有一系列与另一个表中的位置ID相关联的位置ID。我想在这些ID之间创建一个明确且不变的链接,但ID本身具有不同的值。
我如何确保(例如)BA789或BA8001中的员工始终与位置代码CN345相关联(他们是相同的物理位置)。
谢谢,汤姆
答案 0 :(得分: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)
);
然后,您可以在位置代码(ID)之间引入多对多映射表
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 |