MYSQL - 使用子查询和JOIN条件

时间:2015-10-22 23:08:54

标签: mysql sql join subquery left-join

我正在尝试学习如何在MYSQL中加入子查询, 我正在查询问题

对于提及具有HIGH技能的每种语言,请确定最常用的MEDIUM语言。

语言

langid lang
AND  Android
C    C
JAV  JAVA
CPP  CPP

技能表

滑行值

1   High
2   Medium
3   Low

强度

langid sid skid

AND     AW  2
JAVA    AB  1
C       AB  2
C++     AW  1

sid sname

AB  AB1
AW  AW1

以下是我的表结构

CREATE TABLE STUDENT(
SNAME VARCHAR(2) NOT NULL,
SID int NOT NULL,
PRIMARY KEY(SID)
);

CREATE TABLE LANGUAGE(
LANG VARCHAR(50) NOT NULL,
LANGID INT NOT NULL,
PRIMARY KEY(LANGID)
);


CREATE TABLE SKILL(
SKID INT,
VALUE VARCHAR(50),
PRIMARY KEY (SKID)
);


CREATE TABLE STRENGTH(
SID INT NOT NULL,
LANGID INT NOT NULL,
SKID INT, 
FOREIGN  KEY (SID) REFERENCES STUDENT (SID),
FOREIGN  KEY (LANGID) REFERENCES LANGUAGE (LANGID),
FOREIGN  KEY (SKID) REFERENCES SKILL (SKID)
);

预期输出

  prim      | sec       |    count
  JAVA      | C         |        1
  CPP       | Android   |        1

我试过,但我无法实现加入,

1 个答案:

答案 0 :(得分:0)

没有任何数据,很难说你的标准是什么,但根据数据结构,你会加入这样的表:

select *
from strength st
    join student s
        on s.sid = st.sid
    join language l
        on l.langid = st.langid
    left outer join skill sk
        on sk.skid = st.sklevel

学生和语言的内部联接是因为外键字段定义为非空,而sklevel字段可以为null,因此外部联接不会无意中筛选出您想要查看的任何记录。