sql - 有什么方法可以避免在 sql plus 中加入笛卡尔连接
问题描述
我有下面给出的三个表:
supplied_items(SUPPLIER_ID,ITEM_ID,QUANTITY,COST_PRICE);
ORDERS(ORDER_ID,CUSTOMER_ID,EMPLOYEE_ID,ITEM_ID,PRICE,QUANTITY,TOTAL_PRICE,ODATE);
EXPENSES(EXPENSE_ID,EDATE,DESCRIPTION,PAYMENT_TYPE,AMOUNT);
我必须计算净利润。但是当我在查询中包含费用表时,它会与其他表的行生成笛卡尔积。以下是我的查询:
SELECT
SUM(orders.quantity * orders.price) AS "Sale",
SUM(orders.quantity * supplied_items.cost_price) AS "COST",
SUM(orders.quantity *(orders.price - supplied_items.cost_price)) AS "Profit",
SUM(expenses.amount)
FROM
orders
LEFT OUTER JOIN supplied_items ON orders.item_id = supplied_items.item_id
CROSS JOIN expenses;
解决方案
似乎您需要费用表的全部结果:
SELECT
SUM(orders.quantity * orders.price) AS "Sale",
SUM(orders.quantity * supplied_items.cost_price) AS "COST",
SUM(orders.quantity *(orders.price - supplied_items.cost_price)) AS "Profit",
MAX(select SUM(expenses.amount) from expenses) as "Expenses"
FROM
orders
LEFT OUTER JOIN supplied_items ON orders.item_id = supplied_items.item_id
推荐阅读
- php - 无法从 woocommerce 产品循环挂钩/操作中删除 sale_flash 徽章
- hybris - 是否可以在不重新启动服务器的情况下定义新类型并将其加载到 Hybris 类型系统中?
- sql - 在 R 中执行 SQL 存储过程
- html - 为什么 text-justify:distribute 在 Chrome 中不工作?
- python - Python 问题从导入的 csv 中解析列表
- html - 如何将输入与 div 重叠?
- c# - 如何将 Selenium 变量写入文本文件?
- macros - 如何使用 Haxe 宏构建摘要?
- python - 如何使用 OpenPose 数据分割长剪辑?
- sql - EDATE 在 SQL Server 中可比?-- 下一个周年日期计算