来自两个表的SQL语句

来自两个表的SQL语句,sql,ms-access,Sql,Ms Access,我想知道是否可以从一个表中选择某些列,从第二个表中选择另一列,这将与第一个表中的非导入列相关。我必须从access获取此数据,不知道access或SQL是否可以实现此目的。您要查找的是连接: 在第一个表中,您需要引用数据集的主键和外键。您要查找的是连接: 在第一个表中,您需要引用数据集的主键和外键。假设以下表结构: CREATE TABLE tbl_1 ( pk_1 int, field_1 varchar(25), field_2 varchar(25) ); C

我想知道是否可以从一个表中选择某些列,从第二个表中选择另一列,这将与第一个表中的非导入列相关。我必须从access获取此数据,不知道access或SQL是否可以实现此目的。

您要查找的是连接:


在第一个表中,您需要引用数据集的主键和外键。

您要查找的是连接:


在第一个表中,您需要引用数据集的主键和外键。

假设以下表结构:

CREATE TABLE tbl_1 (
    pk_1 int,
    field_1 varchar(25),
    field_2 varchar(25)
);

CREATE TABLE tbl_2 (
    pk_2 int,
    fk_1 int,
    field_3 varchar(25),
    field_4 varchar(25)
);
您可以使用以下选项:

SELECT t1.field_1, t2.field_3
FROM tbl_1 t1
INNER JOIN tbl_2 t2 ON t1.pk_1 = t2.fk_1
WHERE t2.field_3 = "Some String"
关于Bill的帖子,有两种方法可以在SQL查询中创建联接:

  • 隐式-连接是使用 查询的WHERE子句,其中FROM子句中指定了多个表

  • 显式-连接是使用 JOIN子句的适当类型 (内部、左侧、右侧、完全)

始终建议您使用显式联接语法,因为一旦查询变得更复杂,隐式联接可能会出现问题


例如,如果以后向已使用隐式联接的查询添加显式联接,并且该查询在FROM子句中引用了多个表,则FROM子句中引用的第一个表对于显式联接的表将不可见。

假设以下表结构:

CREATE TABLE tbl_1 (
    pk_1 int,
    field_1 varchar(25),
    field_2 varchar(25)
);

CREATE TABLE tbl_2 (
    pk_2 int,
    fk_1 int,
    field_3 varchar(25),
    field_4 varchar(25)
);
您可以使用以下选项:

SELECT t1.field_1, t2.field_3
FROM tbl_1 t1
INNER JOIN tbl_2 t2 ON t1.pk_1 = t2.fk_1
WHERE t2.field_3 = "Some String"
关于Bill的帖子,有两种方法可以在SQL查询中创建联接:

  • 隐式-连接是使用 查询的WHERE子句,其中FROM子句中指定了多个表

  • 显式-连接是使用 JOIN子句的适当类型 (内部、左侧、右侧、完全)

始终建议您使用显式联接语法,因为一旦查询变得更复杂,隐式联接可能会出现问题


例如,如果您稍后将显式联接添加到一个查询,该查询已经使用了FROM子句中引用的多个表的隐式联接,则FROM子句中引用的第一个表对于显式联接的表将不可见。

我不能100%确定我是否理解您的问题

以下是真的吗

您的第一个表是从其他地方导入的。 您只导入了一些列。 您希望生成一个引用尚未导入的列的查询

如果这是真的,那是不可能的。就Access查询引擎而言,未导入的列不存在


为什么不直接导入它们呢?

我不能100%肯定我理解你的问题

以下是真的吗

您的第一个表是从其他地方导入的。 您只导入了一些列。 您希望生成一个引用尚未导入的列的查询

如果这是真的,那是不可能的。就Access查询引擎而言,未导入的列不存在


为什么不直接导入它们呢?

但是主键可以提高查询效率

但是主键可以提高查询效率

主键和外键并不是绝对必要的。但是建议(至少如果你问我;-)当然,我可以同意。但你在回答中确实说了“需要”。主键和外键并不是绝对必要的。但建议(至少如果你问我;-)当然,我可以同意。但您在回答中确实说了“需要”。内部联接将只选择两个表中都匹配的记录。在某些情况下,左连接可能更好()@Dave:这不是同义反复。访问!=ms-access.internal Join将仅选择两个表中都匹配的记录。在某些情况下,左连接可能更好()@Dave:这不是同义反复。访问!=ms access。我认为您可能误解了这个问题,因为“导入”一词的使用方式有点奇怪。我认为您可能误解了这个问题,因为“导入”一词的使用方式有点奇怪。如果您没有主键,那么您真的没有关系数据库,因此,SQL不会很好地工作。如果没有主键,就没有关系数据库,因此SQL不会很好地工作。