mysql - 为什么这个查询没有抓取正确的记录?

标签 mysql subquery

我有这个问题:

SELECT
      bp.product_id,bs.step_number,
      p.price, pd.name as product_name
    FROM 
      builder_product bp
      JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
      JOIN builder b ON bp.builder_id = b.builder_id
      JOIN product p ON p.product_id = bp.product_id
      JOIN product_description pd ON p.product_id = pd.product_id
      WHERE b.builder_id = '74' and bs.optional != '1'
    ORDER by bs.step_number, p.price

正在返回

    88  1   575.0000    Lenovo Thinkcentre POS PC
    92  1   799.0000    Lenovo Thinkcenter Server - RAID Configured
    31  1   1599.0000   All-In-One - Lenovo Thinkcentre 23"
    63  2   169.0000    Lenovo Thinkvision 18.5" - LCD
    62  2   249.0000    Lenovo Thinkvision 22" - LCD
    244 2   559.0000    Touchscreen with MSR - Firebox 15"
    104 3   285.0000    Remote Order Printer - Epson
    65  3   355.0000    Barcode and Label Printer - Zebra 2" TT
    68  3   399.0000    Barcode And Label Printer - Zebra 4" DT
    254 4   106.0000    Cash Drawer - APG - 14X16 - Black
    251 4   195.0000    Cash Drawer - APG - 16X16 - Serial
    97  4   395.0000    Aldelo Lite
    97  5   395.0000    Aldelo Lite
    121 5   549.0000    Cash Register Express  - Pro
    279 5   849.0000    Aldelo Premium
    135 6   0.0000      Free!! Payment Processing Software
    191 6   349.0000    Integrated Payment Processing
    231 7   0.0000    1 User/Location - 8Am - 8Pm Mon - Fri Support Plan - Level 1
    232 7   0.0000    1 User/Location - 24 X 7 X 365 Support Plan - Level 1
    155 7   369.0000    Accessory - Posiflex 12.1" LCD Customer Display

我需要的是每一步的最低价格,所以我假设添加子查询会像这样工作

SELECT
      bp.product_id,bs.step_number,
      p.price, pd.name as product_name
    FROM 
      builder_product bp
      JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
      JOIN builder b ON bp.builder_id = b.builder_id
      JOIN product p ON p.product_id = bp.product_id
      JOIN product_description pd ON p.product_id = pd.product_id
      WHERE b.builder_id = '74' and bs.optional != '1'
      AND bp.builder_product_id = (
            SELECT builder_product_id
            FROM builder_product as alt
            WHERE alt.step_number = bp.step_number
            LIMIT 1
        )
    ORDER by bs.step_number, p.price

但我收到了这个返回

88  1   575.0000    Lenovo Thinkcentre POS PC
244 2   559.0000    Touchscreen with MSR - Firebox 15"
104 3   285.0000    Remote Order Printer - Epson
97  4   395.0000    Aldelo Lite
121 5   549.0000    Cash Register Express  - Pro
191 6   349.0000    Integrated Payment Processing
155 7   369.0000    Accessory - Posiflex 12.1" LCD Customer Display

这是不正确的,因为如您所见,步骤 #2 应该返回

    63  2   169.0000    Lenovo Thinkvision 18.5" - LCD

因为 169.000 小于 559.000 任何想法如何改变它

最佳答案

查看 GROUP BYMIN。试试这个

SELECT
  bp.product_id,bs.step_number,
  MIN(p.price) as price,
  pd.name as product_name
FROM 
  builder_product bp
  JOIN builder_step bs ON bp.builder_step_id = bs.builder_step_id
  JOIN builder b ON bp.builder_id = b.builder_id
  JOIN product p ON p.product_id = bp.product_id
  JOIN product_description pd ON p.product_id = pd.product_id
WHERE b.builder_id = '74' and bs.optional != '1'
GROUP BY bp.product_id
ORDER by bs.step_number, p.price

关于mysql - 为什么这个查询没有抓取正确的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8042557/

相关文章:

sql - Postgresql - 使用带有更改序列表达式的子查询

mysql - 在单列中存储随机数量的外键和值[关系数据库设计]

python - 在“读取初始通信数据包”时与 MySQL 服务器失去连接

mysql - 如何在 MySQL 的单个查询中获取平均数据和特定数据?

php - 选择包含每天每条记录的创建顺序的行

mysql - 试图将 MySQL 数据放入 d3 的嵌套 json 文件中?

MySQL:在另一个子查询中使用子查询结果

java - 使用 Spring 数据定位多对多额外关系属性

php - MySQL 上的多个 INSERT/UPDATE

c# - 当值为0000-00-00 00 :00:00时如何处理mysql datetime列