我需要使用来自其他两个的信息从一个表中获取一个值。 结构如下:
+-----------+---------+------------+
| ID | NAME | ZIP |
+-----------+---------+------------+
| 1 | John | 1111-222 |
| 2 | Maria | 2222-555 |
| 3 | José | 3333-505 |
+-----------+---------+------------+
+-----------+---------+------------+------------+
| 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 |
+-----------+---------+------------+------------+
+-----------+---------+------------+
| 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ã
提前致谢, 米格尔。
答案 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;
假设您的表分别被称为users
,zip_match
和areas_name
。不确定part1
和part2
的数据类型,可能需要将它们转换为字符串才能在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
也许?