【问题标题】:SQL Join with multiple conditions for one columnSQL Join 与一列的多个条件
【发布时间】:2017-03-24 09:49:27
【问题描述】:

在我的情况下,我有两张表格,一张包含所有机构简介的表格和一张代表这些机构研究的材料的表格。

在搜索中,我想查找研究具体材料类型的机构名称。所以可以找研究“木”和“金属”的机构,就“金属”等...

我尝试了以下查询:

    SELECT p.name
    FROM q1_institution_profiles p
    INNER JOIN q9_materials_studied_by_institution pf 
    ON pf.id_institution = p.id_institution
    WHERE pf.id_material_studied = 10 AND pf.id_material_studied = 8

但是结果是空的,因为当我有多个条件时出现问题(这里 id_material_studied 必须等于 8 和 10)。

有没有办法正确地实现这一点,或者我是否必须针对每个条件进行加入?

提前感谢您的回答

【问题讨论】:

  • 不确定我是否理解正确,但似乎将 where 语句中的 AND 更改为 OR 应该会给你想要的。
  • 在哪里(pf.id_material_studied = 10 或 pf.id_material_studied = 8)
  • 不,它不起作用..因为我必须满足这两个条件并且使用“OR”并非如此。它选择所有等于 8 和所有等于 10 的,而不仅仅是等于 8 和 10 的那些。

标签: mysql sql join


【解决方案1】:

我想这就是你想要的:

SELECT p.name
FROM q1_institution_profiles p INNER JOIN
     q9_materials_studied_by_institution pf 
     ON pf.id_institution = p.id_institution
WHERE pf.id_material_studied IN (8, 10)
GROUP BY p.name
HAVING COUNT(DISTINCT pf.id_material_studied) = 2;

也就是说,获取具有两个值中的每一个的行的名称。

WHERE 子句仅选择材料 8 和 10。GROUP BY 然后将它们按p.name 分组。问题是:一个名字是否有both这些材料?嗯,这就是count(distinct) 所做的。

【讨论】:

  • 谢谢它完美的工作!但是,如果你有时间,你能解释一下这个查询的逻辑吗?
猜你喜欢
  • 2022-01-03
  • 2021-08-12
  • 1970-01-01
  • 2016-12-20
  • 1970-01-01
  • 2021-11-21
  • 2017-02-20
  • 2014-10-04
  • 2018-06-28
相关资源
最近更新 更多