mysql - 简化子查询mysql以获取关系表中的所有列

标签 mysql

我有一个名为 tb_customer master 的表。

mysql> select COSTUMER_ID, NAMA, ATTENTION, IN_DATE, IN_REF, JOB_REF, LAST_CARGO FROM tb_customer_master;
+-------------+----------------------+-------------------------+------------+--------+---------+----------------------+
| COSTUMER_ID | NAMA                 | ATTENTION               | IN_DATE    | IN_REF | JOB_REF | LAST_CARGO           |
+-------------+----------------------+-------------------------+------------+--------+---------+----------------------+
|           2 | Eagletainer          | Ms. Joyce Ong Chong Mei | NULL       | 1234   | 123     | Lube                 |
|           5 | APL                  | Test                    | 21-11-2015 | sgdgfa | sgfsd   | FOOD                 |
+-------------+----------------------+-------------------------+------------+--------+---------+----------------------+
2 rows in set (0.00 sec)

我也有表作为表主,具有作为报告主的行为

mysql> select REPAIR_ESTIMATE_ID, EIR_REF, COSTUMER_ID FROM tb_master_repair_estimate;
       +--------------------+------------+-------------+
       | REPAIR_ESTIMATE_ID | EIR_REF    | COSTUMER_ID |
       +--------------------+------------+-------------+
       |                 38 | 1545053    |           5 |
       |                 40 | 1545052    |           5 |
       |                 41 | 1545054    |           5 |
       +--------------------+------------+-------------+
3 rows in set (0.00 sec)

现在,对于一个案例,我想像这样子查询它们

mysql> SELECT
->  a.EIR_REF as EIR,
->
->  (SELECT NAMA FROM tb_customer_master c
->          WHERE a.COSTUMER_ID = c.COSTUMER_ID ) as "Name Of Customer",
->
->  (SELECT ATTENTION FROM tb_customer_master c
->          WHERE a.COSTUMER_ID = c.COSTUMER_ID ) as "ATTENTION"
->
-> FROM tb_master_repair_estimate a
->
-> WHERE a.EIR_REF = "1545052";
+------------+----------------------+-----------+
| EIR        | Name Of Customer     | ATTENTION |
+------------+----------------------+-----------+
| 1545052    | APL                  | Test      |
+------------+----------------------+-----------+
1 row in set (0.00 sec)

我的问题是,我想让我的最后一个查询变得简单。我怎样才能用一列eir,客户名称,注意,in_date,in_ref等变得简单,而不是像在子查询中一一选择。如果一一确定的话,命令太长了。 任何建议都非常感谢

更新

感谢您的快速回复。我使用子查询的原因是因为我的报表主表有很多外键。 这是完整的 tbl_report

mysql> select EIR_REF, NO_TANK, COSTUMER_ID, TANK_ID, TOTAL from   tb_master_repair_estimate where EIR_REF = "1545052";
+------------+---------+-------------+---------+-------+
| EIR_REF    | NO_TANK | COSTUMER_ID | TANK_ID | TOTAL |
+------------+---------+-------------+---------+-------+
| 1545052    |       7 |           5 |       1 |  NULL |
+------------+---------+-------------+---------+-------+

另一个表再次命名为tb_tank_type

mysql> select * from tb_tank_type;
+---------+-----------+------------+
| TANK_ID | NAMA_TYPE | KETERANGAN |
+---------+-----------+------------+
|       1 | IM04      | NULL       |
|       2 | XXXX      | NULL       |
+---------+-----------+------------+
2 rows in set (0.00 sec)

我尝试使用我的代码将它们统一起来,如下所示:

mysql> SELECT
->  a.EIR_REF as EIR,
->
->  (SELECT NAMA_TYPE FROM tb_tank_type b
->     WHERE b.TANK_ID = a.TANK_ID) as "type tank",
->
->  (SELECT NAMA FROM tb_customer_master c
->          WHERE a.COSTUMER_ID = c.COSTUMER_ID ) as "Name Of Customer",
->
->  (SELECT ATTENTION FROM tb_customer_master c
->          WHERE a.COSTUMER_ID = c.COSTUMER_ID ) as "ATTENTION",
->
->  (SELECT PREFIX FROM tb_iso_tanks d
->          WHERE a.NO_TANK = d.ID_TANK)    as "PREFIX",
->
->  (SELECT SERIAL_NUMBER FROM tb_iso_tanks d
->          WHERE a.NO_TANK = d.ID_TANK)    as "SERIAL_NUMBER"
->
-> FROM tb_master_repair_estimate a
->
-> WHERE a.EIR_REF = "1545052";
+------------+-----------+----------------------+-----------+--------+---------------+
| EIR        | type tank | Name Of Customer     | ATTENTION | PREFIX | SERIAL_NUMBER |
+------------+-----------+----------------------+-----------+--------+---------------+
| 1545052    | IM04      | APL                  | Test      | EOLU   |       1234567 |
+------------+-----------+----------------------+-----------+--------+---------------+
1 row in set (0.00 sec)

顺便说一句,再次感谢。

像这样的案例: 又多了一张 table 。

最佳答案

JOIN 通常比子查询更快、更简单:

SELECT a.EIR_REF as EIR, c.NAMA AS `Name of Customer`, c.ATTENTION AS ATTENTION
FROM tb_master_repair_estimate a
   LEFT JOIN tb_customer_master c USING (COSTUMER_ID)
WHERE a.EIR_REF = "1545052"
;

关于mysql - 简化子查询mysql以获取关系表中的所有列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34051971/

相关文章:

mysql - 如何在 MySQL 中散列密码?

php - 检查是否存在于数据库 mysqli_num_rows

php - 创建具有一对多关系的mysql表

mysql - 我想获得评论数量最多的城市名称,其中该州是独一无二的

MySQL : How to get latest row on optional where clause using group by?

php - 如何将用户创建的内容保存为 URL(哈希)参数?

MySQL查询以计算单行中的非空值

mysql docker容器获取远程主机: Connection refused after container running

mysql - 使用一个查询更新插入大量列

mysql - MySQL如何有效地返回跨3个表相关的结果