【问题标题】:MYSQL - Using sub queries and JOIN conditionMYSQL - 使用子查询和 JOIN 条件
【发布时间】:2015-10-22 23:08:53
【问题描述】:

我正在尝试学习如何在 MYSQL 中实现子查询以及 Join, 我正在查询问题

对于提到的每种语言具有 HIGH 的技能,请找出最常被提及的 MEDIUM 语言。

语言

懒惰的语言

AND  Android
C    C
JAV  JAVA
CPP  CPP

技能表

滑行值

1   High
2   Medium
3   Low

实力

懒惰的 sid 打滑

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

sid 名称

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

我试过了,但是无法实现join,

【问题讨论】:

  • 你能提供示例输入/输出,也许是 sqlfiddle?
  • 嘿,我已经添加了示例数据!

标签: mysql sql join subquery left-join


【解决方案1】:

没有任何数据,很难说您的标准是什么,但根据数据结构,您可以像这样连接这些表:

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

student 和 language 的内连接是因为外键字段被定义为非空,而 sklevel 字段可以为空,所以外连接不会无意中筛选掉任何你想查看的记录。

【讨论】:

  • morgb - 我已经添加了示例数据,如果您需要任何详细信息,请告诉我。对于您提供的查询,我需要给出的 Where 条件是什么?
  • 老实说,我不确定我是否理解您发布的问题。基于表结构,强度表似乎是问题的关键,但我没有看到任何样本数据。无论如何,上面的代码显示了如何将所有表连接在一起,这正是您所要求的。除此之外,where 子句应该非常简单,因为您知道自己的数据。
猜你喜欢
  • 1970-01-01
  • 2015-03-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-20
相关资源
最近更新 更多