将MySQL中的数据列与不同的值相关联

时间:2013-12-16 21:49:52

标签: mysql

我认为这是一个简单的问题,但我无法完全理解答案。在一个数据库表中,我有一系列与另一个表中的位置ID相关联的位置ID。我想在这些ID之间创建一个明确且不变的链接,但ID本身具有不同的值。

我如何确保(例如)BA789或BA8001中的员工始终与位置代码CN345相关联(他们是相同的物理位置)。

谢谢,汤姆

1 个答案:

答案 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 |