假设我有 3 张 table 。表 1 包含 client_id 和 client_name。表2包含client_id、client_catid_1和client_catid_2。这些表是根据 client_id 连接的。现在第三个表包含category_id 和category_name。如何根据类别 id 连接第三个表并获取类别名称?示例:
表 1:
client_id | client_name
-----------------------
121231231 | Some name
345234666 | Another Name
-----------------------
表 2:
client_id | client_catid_1 | client_catid_2
-------------------------------------------
121231231 | 22 | 79
345234666 | 34 | 566
------------------------------------------
表 3:
category_id | category_name
----------------------------
22 | category 22
34 | category 34
79 | category 79
566 | category 566
----------------------------
然后输出:
client_id | client_name | client_cat1 | client_cat2
---------------------------------------------------
121231231 | Some name | category 22 | category 79
345234666 | Another | category 34 | category 566
---------------------------------------------------
当前查询:
SELECT client.*,
cat1id.client_catid_1 as cat1,
cat2id.client_catid_2 as cat2
FROM tb_clients AS client
LEFT JOIN tb_clients_categories cat1id ON client.client_id = cat1id.client_id
LEFT JOIN tb_clients_categories cat2id ON client.client_id = cat2id.client_id
WHERE client.client_id = 65447
此外,我并不是在询问数据库规范化或设计。我这么说只是因为人们往往会错过你的问题并开始尝试告诉你更好的数据库设计。我明白这一点。我正在处理一些我最初没有放在一起的东西,并且更改数据库不是一个选择!
提前致谢!
最佳答案
用途:
SELECT a.client_id,
a.client_name,
c1.category_name AS client_cat1,
c2.category_name AS client_cat2
FROM tb_clients a
LEFT JOIN tb_clients_categories b ON b.client_id = a.client_id
LEFT JOIN TABLE C c1 ON c1.category_id = b.client_catid_1
LEFT JOIN TABLE C c2 ON c2.category_id = b.client_catid_2
WHERE c1.category_name = 'Something'
-- because you can't refer to a column (client_cat1) alias in the WHERE
这将为您提供客户列表,以及可选的类别名称。如果 tb_clients_categories
和 tb_clients
之间不存在关系,则仍会显示客户端名称以及 client_cat1
和 client_cat2
将为空。如果您不希望出现这种情况,请删除 JOIN 上的 LEFT
关键字,仅适用于具有两个关联类别的客户端,以显示在输出中。
关于sql - 3 MySQL 中的表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289836/