sql - 3 MySQL 中的表连接

标签 sql mysql database

假设我有 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_categoriestb_clients 之间不存在关系,则仍会显示客户端名称以及 client_cat1client_cat2将为空。如果您不希望出现这种情况,请删除 JOIN 上的 LEFT 关键字,仅适用于具有两个关联类别的客户端,以显示在输出中。

关于sql - 3 MySQL 中的表连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2289836/

相关文章:

Mysql - 用单个字符串搜索多个关键字?

mysql - 在mysql中选择总和值的最大值

mysql - SQL中计算连续0的个数

mysql - 复杂的选择

php - 级联表中的值

java - 首次创建数据库时,Hibernate 初始数据导入不起作用

sql - Oracle SQL Sum 缺少右括号

sql - 每年计算两个不同的值

c# - 更新查询位置附近的语法不正确

php - 在指定时间后删除 Mysql 行