2008-11-11 131 views
1

我想知道是否可以从一个表中选择某些列,并从另一个表中选择与第一个表中的非导入列相关的另一列。我必须从访问中获取这些数据,并且不知道这是否可以使用Access或SQL。来自两个表的SQL语句

回答

6

假设下面的表结构:

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" 

至于比尔的帖子,有两种方法来创建SQL查询中使用JOIN的:

  • 隐式 - 联接是使用 创建的,该段的WHERE子句使用多个表ERY在被指定的FROM子句

  • 显 - 使用 适当类型JOIN子句的,创建加入 (INNER,LEFT,RIGHT,FULL)

始终建议您使用显式JOIN语法作为隐式联接可能会导致问题一旦查询变得更加复杂。例如,如果稍后向已在FROM子句中引用多个表的已使用隐式连接的查询添加显式连接,则FROM子句中引用的第一个表对于显式连接表将不可见。

+1

内部加入将只选择在两个表中都匹配的记录。在某些情况下,左连接可能更好(http://www.devshed.com/c/a/MySQL/Understanding-SQL-Joins/) – Fionnuala 2008-11-11 13:40:26

2

什么你所寻找的是联接:

http://en.wikipedia.org/wiki/Join_(SQL)

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

+0

主键和外键不是严格必要的。 – 2008-11-11 13:20:33

+0

但建议(至少如果你问我;-) – okoman 2008-11-11 13:26:50

+0

当然,我可以同意这一点。但你的答案中确实表示“需要”。 – 2008-11-11 13:53:15

0

我不是100%确定我理解你的问题。

以下为真:

您的第一张表是从其他地方导入的。 您只导入了一些列。 你想建立一个查询引用一个你还没有导入的列。

如果这是真的,这是不可能的。至于涉及非导入列的Access查询引擎不存在。

为什么不只是导入它们呢?

0

但主键使查询效率更高