A表有CREATE_USER_RRN和UPDATE_USER_RRN,B表有USER_RRN和USER_NAME,将A表的CREATE_USER_RRN、UPDATE_USER_RRN和B表的USER_RRN关联后查询A表两个字段实际代表的USER_NAME
时间: 2023-07-31 17:12:42 浏览: 83
好的,根据您的需求,可以使用如下的SQL查询语句来实现:
```
SELECT CONCAT_WS('', BU.USER_NAME, '_', CU.USER_NAME) AS UserName
FROM A AS T
JOIN B AS BU ON T.CREATE_USER_RRN = BU.USER_RRN
JOIN B AS CU ON T.UPDATE_USER_RRN = CU.USER_RRN;
```
以上SQL语句中,通过使用 JOIN 语法将 A 表和 B 表进行关联,其中使用了两次 B 表的自连接,分别关联了 CREATE_USER_RRN 和 UPDATE_USER_RRN 字段对应的 USER_RRN 值,然后通过 CONCAT_WS 函数将这两个用户的姓名拼接成一个字符串,作为查询结果的 UserName 列。
需要注意的是,如果 A 表中的 CREATE_USER_RRN 和 UPDATE_USER_RRN 字段对应的 USER_RRN 值在 B 表中不存在,那么在进行关联查询时,这些记录将不会出现在查询结果中。
相关问题
优化这段SQL: SELECT CONCAT(UM.USER_ID,UM.USER_NAME) Creat_USERNAME, CONCAT(UM.USER_ID,UM.USER_NAME) Update_USERNAME FROM P1RPT.CARRIER_MASTER CM, P1RPT.USER_MASTER UM WHERE 1=1 AND CM.CREATE_USER_RRN = UM.USER_RRN AND CM.UPDATE_USER_RRN = UM.USER_RRN
针对您给出的SQL语句,我可以做如下优化:
1. 使用 ANSI SQL 的 JOIN 语法,代替原有的 WHERE 条件
2. 使用别名简化表名,提高可读性
3. 使用 CONCAT_WS 函数,代替 CONCAT 函数,提高代码可读性
综上,优化后的SQL查询语句如下:
```
SELECT CONCAT_WS('', UM.USER_ID, UM.USER_NAME) AS Create_USERNAME,
CONCAT_WS('', UM.USER_ID, UM.USER_NAME) AS Update_USERNAME
FROM P1RPT.CARRIER_MASTER CM
JOIN P1RPT.USER_MASTER UM ON CM.CREATE_USER_RRN = UM.USER_RRN AND CM.UPDATE_USER_RRN = UM.USER_RRN
```
以上SQL语句中,使用 JOIN 语法代替 WHERE 条件,提高了查询效率;使用表别名简化了表名,提高了SQL代码的可读性;使用 CONCAT_WS 函数代替 CONCAT 函数,提高了代码可读性。
SELECT A.ORG_RRN , A.DOC_ID FROM WIP_WO A INNER JOIN WIP_WO B ON B.ORG_RRN = A.ORG_RRN AND B.PARENT_ID = A.DOC_ID INNER JOIN MM_BOM D ON D.ORG_RRN = A.ORG_RRN AND D.NAME = A.RESERVED3 WHERE D.RESERVED8 IN ('LAM') 怎么优化
对于这个查询语句,可以考虑以下优化:
1. 确保表 WIP_WO 和 MM_BOM 上有适当的索引,以便加快连接操作和筛选操作的速度。具体可以根据查询语句中使用的列建立索引,例如在 WIP_WO 上可以建立 (ORG_RRN, DOC_ID, RESERVED3) 的复合索引,在 MM_BOM 上可以建立 (ORG_RRN, NAME, RESERVED8) 的复合索引。
2. 尝试使用 EXISTS 或者 IN 子查询来代替 INNER JOIN,这样可以避免产生笛卡尔积,提高查询效率。
3. 如果数据量较大,可以考虑分批次查询,使用 LIMIT 和 OFFSET 控制每次查询的数据量,避免一次查询过多数据造成性能问题。
下面是使用 EXISTS 来替换 INNER JOIN 的优化示例:
```
SELECT A.ORG_RRN, A.DOC_ID
FROM WIP_WO A
WHERE EXISTS (
SELECT 1
FROM WIP_WO B, MM_BOM D
WHERE B.ORG_RRN = A.ORG_RRN
AND B.PARENT_ID = A.DOC_ID
AND D.ORG_RRN = A.ORG_RRN
AND D.NAME = A.RESERVED3
AND D.RESERVED8 IN ('LAM')
);
```
这样可以避免 INNER JOIN 产生的笛卡尔积,提高查询效率。
阅读全文