一个mysql联表查询的问题
PHPz
PHPz 2017-04-17 16:06:59
[MySQL讨论组]
stock(进货单表)
stock_id -- 进货单ID主键

stock_product(进货单和产品关系表)
stock_id -- 进货单ID
product_sn -- 产品编号(厂家提供的编号,每个产品一个)
product_no -- 产品自编号(针对该进货单的每个产品的自编号,同一进货单内自编号和产品编号是一一对应,但不同进货单里可能有相同的自编号对应不同的厂家产品编号)
quantity -- 进货数量

shipment(出货单表)
shipment_id -- 出货单ID
stock_id -- 进货单ID

shipment_product(出货单和产品关系表)
shipment_id -- 出货单ID
product_no -- 产品自编号
quantity -- 出货数量
# 查询进货单ID为1的产品出货数量明细
SELECT
  sh.stock_id,
  st_p.product_sn,
  sh_p.quantity
FROM shipment_product sh_p 
LEFT JOIN shipment sh ON sh.shipment_id=sh_p.shipment_id 
LEFT JOIN stock_product st_p ON st_p.product_no=sh_p.product_no 
WHERE sh.stock_id=1

这个SQL查出来的出货情况是不对的,请问该怎么写?

PHPz
PHPz

学习是最好的投资!

全部回复(3)
高洛峰
SELECT
    *
FROM
    shipment_product shipment_product
LEFT JOIN shipment shipment ON shipment.shipment_id = shipment_product.shipment_id
WHERE
    shipment_product.product_no IN (
        SELECT
            stock_product.product_no
        FROM
            stock_product stock_product
        LEFT JOIN stock stock ON stock.stock_id = stock_product.stock_id
        WHERE
            stock_product.stock_id = 1
    )
巴扎黑

第二个left join stock表试试吧

天蓬老师

如果 stock_product表中的字段product_no等于shipment_product

SELECT
  *
FROM
  shipment_product AS sh_p
WHERE
  product_no = ( 
   SELECT 
     stock_id
   FROM
     stock_product AS st_p
   WHERE
     st_p.stock_id = 1   
)

不一样的话

SELECT
  *
FROM
  shipment_product AS sh_p
WHERE
  sh_p.shipment_id = 
(
  SELECT 
    shipment_id
  FROM
    shipment AS st_p
  WHERE
    st_p.stock_id = 1     
)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号