【问题标题】:How to refer without foreign key?没有外键如何引用?
【发布时间】:2018-10-09 02:10:24
【问题描述】:

创建两个表:

Course(Course_id(主键), Course_name)

Student(Roll_no(primary key), Name,Course_id(Foreign key)) 和 Retrieve 所有被“BSC”课程录取的学生的名字。

假设 BSC 的 course_id 为 105。

查询将是: 从学生那里选择姓名 Course_id = 105

我可以在不知道 Course_id 的情况下查询学生的姓名(仅使用 Course_name)吗?

【问题讨论】:

  • 学生表中没有 course_name 属性。

标签: mysql sql


【解决方案1】:

你可以在表之间使用内连接

  SELECT s.Name 
  FROM Student s  
  INNER JOIN Course c on c.course_id  = s.Course_id
  WHERE c.Course_name = 'your_course_name'

或使用类似

  SELECT s.Name 
  FROM Student s  
  INNER JOIN Course c on c.course_id  = s.Course_id
  WHERE c.Course_name like 'your_course_name'

【讨论】:

  • 使用 SELECT Name From Student 和 SELECT s.Name FROM Student s 有什么区别?
  • 没什么,但最好在 MySQL @rgo 中使用别名或完全量化的表名,这样 MySQL 在使用子查询时不能混淆列(注意不是在这个查询案例中)我的意思是一般用法 -> 在此示例中,您会期望第一个查询出现错误 sqlfiddle.com/#!9/02502/5
【解决方案2】:

或者使用WHERE IN (...)

SELECT 
 Student.Name
FROM 
 Student 
WHERE
 Student.Course_id IN (
  SELECT
   Course.cource_id 
  FROM 
   Course
  WHERE
   Course.Name = 'BSC'
)

【讨论】:

  • 正确,但 IN 子句通常不会产生比 innner 更好的性能 ..join .. 无论如何都赞成
【解决方案3】:

是的,你可以。

SELECT st.Name 
FROM Student st  
INNER JOIN Course c on c.course_id  = st.Course_id
WHERE 
c.Course_name = 'Course_Name';

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    • 2011-02-27
    • 2020-04-16
    • 2018-10-14
    • 1970-01-01
    相关资源
    最近更新 更多