【问题标题】:SQLite: retrieving columns from two parent tables with JOINSQLite:使用 JOIN 从两个父表中检索列
【发布时间】:2017-01-24 16:17:24
【问题描述】:

我有两个父表引用联结表中的外键:

schoolA_courses (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
course_prefix TEXT, 
course_number INTEGER, 
course_title TEXT

schoolB_courses (
id INTEGER PRIMARY KEY AUTOINCREMENT, 
course_prefix TEXT, 
course_number INTEGER, 
course_title TEXT, 
course_url TEXT)

schoolB_equivalencies (
equivalency_id INTEGER PRIMARY KEY AUTOINCREMENT, 
schoolA_id INTEGER NOT NULL, 
schoolB_id INTEGER NOT NULL, 
is_archived INTEGER NOT NULL, 
FOREIGN KEY (schoolA_id) REFERENCES schoolA_courses (id), 
FOREIGN KEY (schoolB_id) REFERENCES schoolB_courses (id), 
UNIQUE (schoolA_id, schoolB_id) ON CONFLICT IGNORE)  

我正在尝试从两个父表中的匹配行中选择所有列,但我的查询只返回-

schoolB_courses.course_prefix,
schoolB_courses.course_number,
schoolB_courses.course_title,
schoolB_courses.course_url

-来自一个父表(schoolB)。如何修改我的查询以从两个表中检索指定的字段,例如

schoolA_courses.course_prefix,
schoolA_courses.course_number,
schoolA_courses.course_title,
schoolB_courses.course_prefix,
schoolB_courses.course_number,
schoolB_courses.course_title,
schoolB_courses.course_url

我使用的查询是:

SELECT 
    schoolA_courses.course_prefix,
    schoolA_courses.course_number,
    schoolA_courses.course_title,
    schoolB_courses.course_prefix,
    schoolB_courses.course_number,
    schoolB_courses.course_title,
    schoolB_courses.course_url
FROM schoolB_equivalencies
INNER JOIN schoolA_courses
ON schoolA_courses.id = schoolB_equivalencies.schoolA_id
INNER JOIN schoolB_courses
ON schoolB_courses.id = schoolB_equivalencies.schoolB_id');

查询的结果是

array (size=2)
  0 => 
    array (size=4)
      'course_prefix' => string 'ARCH' (length=4)
      'course_number' => string '111' (length=3)
      'course_title' => string 'Introduction to Structures' (length=26)
      'course_url' => string 'www.google.com' (length=14)
  1 => 
    array (size=4)
      'course_prefix' => string 'ARCH' (length=4)
      'course_number' => string '111' (length=3)
      'course_title' => string 'Introduction to Structures' (length=26)
      'course_url' => string 'www.google.com' (length=14)

【问题讨论】:

  • 结果前三列的值是多少?
  • 查询返回的是 schoolB_courses.course_prefix、schoolB_courses.course_number、schoolB_courses.course_title 和 schoolB_courses.course_url 的值,但没有返回 schoolA 表的值。
  • 你没有回答我的问题。
  • 所有列中的值都是字符串,除了 id 列 - 这就是您要问的吗?
  • 我要问的是查询结果的前三列中字符串的值是什么。

标签: join sqlite foreign-keys


【解决方案1】:

您用于访问数据库的语言(无论是什么语言)不允许通过索引访问列,并且会被相同的列名混淆。

用 AS 重命名结果列:

SELECT 
    schoolA_courses.course_prefix AS A_prefix,
    schoolA_courses.course_number AS A_number,
    schoolA_courses.course_title  AS A_title,
    schoolB_courses.course_prefix AS B_prefix,
    ...

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多