MySQL使用三个表中的数据获取值

时间:2014-04-24 13:51:02

标签: mysql

我需要使用来自其他两个的信息从一个表中获取一个值。 结构如下:

USERS TABLE

+-----------+---------+------------+
| ID        | NAME    | ZIP        |
+-----------+---------+------------+
| 1         | John    | 1111-222   |
| 2         | Maria   | 2222-555   |
| 3         | José    | 3333-505   |
+-----------+---------+------------+

ZIP-MATCH TABLE

+-----------+---------+------------+------------+
| DD        | CC      | PART1      | PART2      |
+-----------+---------+------------+------------+
| 1         | 1       | 1111       | 101        |
| 1         | 1       | 1111       | 111        |
| 1         | 2       | 1111       | 222        |
| 1         | 3       | 2222       | 333        |
| 2         | 1       | 2222       | 100        |
| 2         | 1       | 2222       | 555        |
| 2         | 2       | 2244       | 222        |
| 2         | 2       | 2244       | 333        |
| 2         | 3       | 2245       | 311        |
| 3         | 1       | 3333       | 111        |
| 3         | 2       | 3333       | 222        |
| 3         | 3       | 3333       | 505        |
+-----------+---------+------------+------------+

AREAS NAME TABLE

+-----------+---------+------------+
| DD        | CC      | AREA       |
+-----------+---------+------------+
| 1         | 1       | Lisboa     |
| 1         | 2       | Porto      |
| 1         | 3       | Aveiro     |
| 2         | 1       | Braga      |
| 2         | 2       | Fundão     |
| 2         | 3       | Bogas      |
| 3         | 1       | Faro       |
| 3         | 2       | Leiria     |
| 3         | 3       | Covilhã    |
+-----------+---------+------------+

我需要做的是从第一个表中获取所有用户的查询,其中包含所有用户数据(ID,NAME,ZIP)以及AREA名称。 对于这个例子,它将是:

1, John, 1111-222, Porto
2, Maria, 2222-555, Braga
3, José, 3333-505, Covilhã

提前致谢, 米格尔。

2 个答案:

答案 0 :(得分:0)

这就是答案:

SELECT 
a.id, 
a.name, 
a.zip, 
c.area

FROM

users a
LEFT JOIN
zip_match b

ON a.zip = concat(b.part1,'-',b.part2)

LEFT JOIN

areas_name c

ON b.dd = c.dd
and b.cc = c.cc;

假设您的表分别被称为userszip_matchareas_name。不确定part1part2的数据类型,可能需要将它们转换为字符串才能在concat函数中使用。

答案 1 :(得分:0)

select users.id, users.name, users.zip, areas.area from users u, zipmatch z, areas a
where u.zip = z.part1 + '-' + z.part2 
and a.dd = z.dd and a.cc = z.cc

也许?