【问题标题】:Mysql condition based table join [duplicate]基于Mysql条件的表连接[重复]
【发布时间】:2021-02-22 07:56:10
【问题描述】:

我想根据以下场景加入两个表:

  1. 需要显示所有需求表值

  2. 根据requirement_id和inquiry_id加入第二张表(prod_spec)。

表1(要求):

表 2(产品规格):

使用以下查询,我得到以下结果:

SELECT requirements.id,requirements.requirement,prod_spec.evidence,prod_spec.status,prod_spec.no_specify,prod_spec.inquiry_id FROM requirements LEFT JOIN product_spec ON prod_spec.requirement_id=requirement.id

当我将 where 条件例如: whereinquiry_id='67' 放到 sql 查询中时,问题是没有得到任何结果。请告诉我如何根据inquiry_id 显示行。

仅供参考,根据inquiry_id,requirement_id 只会在prod_spec 表中出现一次。

【问题讨论】:

    标签: mysql sql left-join where-clause


    【解决方案1】:

    当我将 where 条件(例如:where inquiry_id = '67')放入 sql 查询时,问题是没有得到任何结果

    LEFT JOINed表上的条件需要去JOINON子句:

    SELECT r.id,r.requirement, ps.evidence,ps.status, ps.no_specify, ps.inquiry_id 
    FROM requirements r
    LEFT JOIN prod_spec 
        ON  ps.requirement_id = requirement.id 
        AND ps.inquiry_id = 67   --> here
    

    理由:如果您将该条件放在WHERE 子句中,那么它就成为强制性的;因此,requirements 中与 prod_spec 中不匹配的行将被从结果集中逐出。

    旁注:

    • 表别名使查询更易于编写和阅读

    • inquiry_id 似乎是一个数字,所以应该这样比较;不要在文字 67 周围加上单引号

    【讨论】:

      猜你喜欢
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-09
      • 2019-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      相关资源
      最近更新 更多