JOIN A ON B.order_no = A.order_no
时间: 2024-05-30 11:15:52 浏览: 17
This statement is used to join two tables A and B based on the common column "order_no". The resulting table will have all the columns from both tables where the order_no values match.
For example, if table A has columns order_no, customer_name, and order_total, and table B has columns order_no, product_name, and quantity, the resulting table will have columns order_no, customer_name, order_total, product_name, and quantity for all the rows where the order_no values match in both tables.
相关问题
请帮我看看这个sql语句是否正确,并改正:select a.ebeln, a.ebelp, a.art, a.kdauf, a.zbw, a.size1, a.txz01, a.menge, b.quantity, (a.menge - b.quantity) as OWE_MATERIAL, ( select sum(THIS_PLAN_QTY) as HAVE_PLAN , a.ebeln , a.ebelp , a.kdauf from SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c , SCM_PROCESS_PURCHASE_ORDER_D a group by c.order_no , c.order_seq , c.sales_order , a.ebeln , a.ebelp , a.kdauf having c.order_no = a.ebeln And c.order_seq = a.ebelp And c.sales_order = a.kdauf ) , ( select a.menge - t.HAVE_PLAN as OWN_PLAY from (select sum(THIS_PLAN_QTY) as HAVE_PLAN , c.order_no , c.order_seq , c.sales_order from SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c , SCM_PROCESS_PURCHASE_ORDER_D a group by c.order_no , c.order_seq , c.sales_order , a.ebeln , a.ebelp , a.kdauf having c.order_no = a.ebeln And c.order_seq = a.ebelp And c.sales_order = a.kdauf ) t , SCM_PROCESS_PURCHASE_ORDER_D a where a.ebeln = t.order_no and a.ebelp = t.order_seq and a.menge = t.sales_order ) , d.scan_qty, (d.quantity - d.scan_qty) as OWN_PRODUCE, e.scan_qty, (e.quantity - e.scan_qty) as OWE_SHIP from SCM_PROCESS_PURCHASE_ORDER_D a left join MMS_INOUT_BILL_M b On a.ebeln = b.purchase_order_number And a.ebelp = b.purchase_order_seq And a.kdauf = b.sales_order left join SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c on a.ebeln = c.order_no And a.ebelp = c.order_seq And a.kdauf = c.sales_order left join SCM_PROCESS_OUTPUT d on a.ebeln = d.order_no And a.ebelp = d.order_seq And a.kdauf = d.sales_order left join SCM_OUTSOURCE_SHIP e on a.ebeln = e.qr_code and a.ebelp = e.order_no and a.kdauf = e.order_seq where a.art = 'IE7181' Order by a.ebeln desc, a.ebelp;
这个 SQL 语句比较复杂,但是有一些问题需要修改:
- 在子查询中,需要将 select 子句中的 a.ebeln, a.ebelp, a.kdauf 与 group by 子句中的字段保持一致,否则会出现错误。
- 子查询中的第一个 SELECT 子句需要加上 WHERE 子句,限制查询条件。
- 子查询中的第二个 SELECT 子句中的 a.menge 应该改为 t.sales_order。
- 在最后的 SELECT 子句中,d.scan_qty 与 e.scan_qty 都没有明确指定表名,可能会出现错误。
以下是修改后的 SQL 语句:
```
SELECT
a.ebeln,
a.ebelp,
a.art,
a.kdauf,
a.zbw,
a.size1,
a.txz01,
a.menge,
b.quantity,
(a.menge - b.quantity) AS OWE_MATERIAL,
(
SELECT
SUM(c.THIS_PLAN_QTY) AS HAVE_PLAN,
a.ebeln,
a.ebelp,
a.kdauf
FROM
SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
c.order_no = a.ebeln
AND c.order_seq = a.ebelp
AND c.sales_order = a.kdauf
AND a.art = 'IE7181'
GROUP BY
c.order_no,
c.order_seq,
c.sales_order,
a.ebeln,
a.ebelp,
a.kdauf
),
(
SELECT
a.menge - t.sales_order AS OWN_PLAY
FROM
(
SELECT
SUM(c.THIS_PLAN_QTY) AS HAVE_PLAN,
c.order_no,
c.order_seq,
c.sales_order
FROM
SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
c.order_no = a.ebeln
AND c.order_seq = a.ebelp
AND c.sales_order = a.kdauf
AND a.art = 'IE7181'
GROUP BY
c.order_no,
c.order_seq,
c.sales_order,
a.ebeln,
a.ebelp,
a.kdauf
) t,
SCM_PROCESS_PURCHASE_ORDER_D a
WHERE
a.ebeln = t.order_no
AND a.ebelp = t.order_seq
AND a.kdauf = t.sales_order
AND a.art = 'IE7181'
),
d.scan_qty,
(d.quantity - d.scan_qty) AS OWN_PRODUCE,
e.scan_qty,
(e.quantity - e.scan_qty) AS OWE_SHIP
FROM
SCM_PROCESS_PURCHASE_ORDER_D a
LEFT JOIN MMS_INOUT_BILL_M b ON a.ebeln = b.purchase_order_number AND a.ebelp = b.purchase_order_seq AND a.kdauf = b.sales_order
LEFT JOIN SCM_OUTSOURCE_PRODUCTION_PLAN_LIST c ON a.ebeln = c.order_no AND a.ebelp = c.order_seq AND a.kdauf = c.sales_order
LEFT JOIN SCM_PROCESS_OUTPUT d ON a.ebeln = d.order_no AND a.ebelp = d.order_seq AND a.kdauf = d.sales_order
LEFT JOIN SCM_OUTSOURCE_SHIP e ON a.ebeln = e.qr_code AND a.ebelp = e.order_no AND a.kdauf = e.order_seq
WHERE
a.art = 'IE7181'
ORDER BY
a.ebeln DESC,
a.ebelp;
```
select count(*) from outward_delivery_order odo left join mc_order mo on mo.id = odo.order_id left join starbucks_order so on so.order_no = odo.order_no; 优化这段sql
对于这段 SQL 查询,你可以尝试以下优化方法:
1. 添加索引:确保相应的表上的列都有适当的索引。对于 `outward_delivery_order` 表,确保 `order_id` 列有索引;对于 `mc_order` 表,确保 `id` 列有索引;对于 `starbucks_order` 表,确保 `order_no` 列有索引。这将加快连接操作和查询速度。
2. 避免使用通配符:使用具体的列名代替 `*`,这样可以减少从磁盘读取的数据量。
3. 调整连接顺序:根据表的大小和关联关系,调整连接的顺序,将最小的表放在前面。这可以减少连接操作的数据量。
4. 考虑使用内连接:如果只需要返回存在关联的记录,可以将左连接改为内连接(INNER JOIN),这样可以进一步减少数据量。
优化后的 SQL 查询如下所示:
```sql
SELECT COUNT(*)
FROM outward_delivery_order odo
INNER JOIN mc_order mo ON mo.id = odo.order_id
INNER JOIN starbucks_order so ON so.order_no = odo.order_no;
```
请注意,具体的优化方法可能因数据库引擎、表结构和数据量的差异而有所不同。在进行任何更改之前,请确保在适当的环境中进行测试和备份数据。
相关推荐
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)