mysql - 使用条件从 2 个表中检索数据

标签 mysql sql join

我有两张 table

+---------------------+
|       T_EQUIPMENT   |
+----+--------+---+---+
| ID | NAME   |APPROVED|
+----+--------+---+---+
| 01 | foo1   |  0    |
+----+--------+---+---+
| 02 | foo2   |  1    |
+----+--------+---+---+
| 03 | foo3   |  1    |
+----+--------+---+---+
| 04 | foo4   |  1    |
+----+--------+---+---+

+---------------------------+
|       T_HAS_EQUIPMENT     |
+----+------------+----+----+
| ID_CENTER | ID_EQUIP      |
+----+------------+----+----+
|     12    |      2        |
+----+------------+----+----+
|     3     |      3        | 
+----+------------+----+----+
|     3     |      2        |
+----+------------+----+----+
|     5     |      3        |
+----+-----------+----+----+
|     6     |      2        |
+----+------------+----+----+

我想获得已批准设备的 id、名称 (APPROVED=1) 以及该特定中心是否拥有该设备

例如 id_center = 3 我想要这个

    +---------------------+
    |       RESULT        |
    +----+--------+---+---+
    | ID | NAME   |  HAS  |
    +----+--------+---+---+
    | 02 | foo2   |  1    |
    +----+--------+---+---+
    | 03 | foo3   |  1    |
    +----+--------+---+---+
    | 04 | foo4   |  0    |
    +----+--------+---+---+

所以,我检索所有设备,我知道一个中心是否有这个设备。有什么想法吗?

最佳答案

使用:

   SELECT e.id, 
          e.name,
          CASE 
            WHEN he.id_center IS NOT NULL THEN 1 
            ELSE 0
          END AS has
     FROM T_EQUIPMENT e
LEFT JOIN T_HAS_EQUIPMENT he ON he.id_equip = e.id
                            AND he.id_center = 3
    WHERE e.approved = 1
 ORDER BY e.id

使用 OUTER (LEFT, RIGHT) 联接针对表放置过滤条件可以显着改变输出。在此示例中,在进行 JOIN 之前过滤 id_center。如果它在 WHERE 子句中,过滤将在之后应用。

关于mysql - 使用条件从 2 个表中检索数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5517180/

相关文章:

php - 无脂框架; SQL Mapper 插入两次

mysql - 将mysql中同一个表的行值与条件进行比较

sql - 如何在 API 的查询字符串中设计通用过滤运算符?

sql - 如何将数字转换为以逗号分隔的数字格式字符串?

asp.net-mvc - 使用 Entity Framework 连接两个数据库中的表

MySQL 通过 JOIN 选择没有有效订单的客户

mysql复制死锁slave停止

SQL特殊从表中选择

mysql - 关联同一个表中的两列

MySQL:级联与限制