【问题标题】:Suggestion needed with Conditional mySQL query条件 mySQL 查询需要的建议
【发布时间】:2019-12-12 12:32:40
【问题描述】:

我有 2 个 mySQL 表,如下所示。

CREATE TABLE occupation_competence(grpid varchar(15), skillid varchar(15));
INSERT INTO occupation_competence(grpid,skillid) VALUES("II-Ob","IL-X");
INSERT INTO occupation_competence(grpid,skillid) VALUES("II-Ob","II-1");
INSERT INTO occupation_competence(grpid,skillid) VALUES("II-Ob","IS-1");
INSERT INTO occupation_competence(grpid,skillid) VALUES("II-Oc","IL-X");
INSERT INTO occupation_competence(grpid,skillid) VALUES("II-Oc","II-1");
INSERT INTO occupation_competence(grpid,skillid) VALUES("AA-RS","IL-X");
INSERT INTO occupation_competence(grpid,skillid) VALUES("AA-RS","AA-1");


CREATE TABLE personnel_competences(id varchar(12), skillid varchar(50));
INSERT INTO personnel_competences(id, skillid) VALUES(79,"IT-1");
INSERT INTO personnel_competences(id, skillid) VALUES(79,"II-1");
INSERT INTO personnel_competences(id, skillid) VALUES(79,"IL-X");
INSERT INTO personnel_competences(id, skillid) VALUES(56,"AA-X");
INSERT INTO personnel_competences(id, skillid) VALUES(80,"AA-X");
INSERT INTO personnel_competences(id, skillid) VALUES(80,"IL-X");
INSERT INTO personnel_competences(id, skillid) VALUES(80,"AA-1");
INSERT INTO personnel_competences(id, skillid) VALUES(8,"II-1");
INSERT INTO personnel_competences(id, skillid) VALUES(8,"IL-X");
INSERT INTO personnel_competences(id, skillid) VALUES(21,"YO-X");
INSERT INTO personnel_competences(id, skillid) VALUES(51,"AA-1");
INSERT INTO personnel_competences(id, skillid) VALUES(51,"IL-X ");

我需要以这种方式从表中提取数据/id:

| AA-RS | 80 |
| AA-RS | 51 |
| II-Oc | 79 |
| II-Oc | 8  |

在这里,例如,在第一个 (occupation_competence) 表中,在同一个 grpid (“AA-RS”) 下,我们有 2 个不同的值“IL-X”和“AA-1”。然后我们来到第二个(personnel_competences)表,我们找到至少必须具有这两个值的 id。在这种情况下,id no 80 和 51 至少具有相同的值,所以我们取它。

另一个例子,在第一个表中,“II-Ob”有 3 个值:“IL-X”、“II-1”、“IS-1”。然后我们转到第二个表并尝试找出至少必须具有这 3 个值的 id。由于没有具有所有这 3 个值的 id,所以我们不接受它。

同理,“II-Oc”有两个值:“IL-X”和“II-1”。而在第二个表中,id 79 和 8 至少有这两个值,所以我们取它。

在这种情况下我应该使用什么 SQL/mySQL 查询/条件?任何帮助/建议将不胜感激。

【问题讨论】:

    标签: mysql sql database datatables


    【解决方案1】:

    假设两个表中没有重复,您可以使用joingroup by

    select oc.grpid, pc.id
    from occupation_competence oc join
         personnel_competences pc
         on oc.skillid = pc.skillid
    group by oc.grpid, pc.id
    having count(*) = (select count(*) from occupation_competence oc2 where oc2.grpid = oc.grpid);
    

    Here 是一个 dbfiddle。

    注意:这里假设personnel_competences最后一行技能中的空格是错字。如果没有,您需要在查询中删除空格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多