0

如果您习惯了 SQL,这可能是一个简单的方法,但我不习惯。

我有这个查询:

SELECT * 
FROM myTable 
LEFT JOIN anotherTable 
    ON myTable.myField=anotherTable.anotherField

实际上,这个查询从 myTable 返回满足连接条件的所有内容(就我的理解而言)。此查询效果很好,但我想从另一个表中选择另一个字段。我想做的是这样的:

SELECT myTable.*, myTable2.aSpecificField 
FROM myTable, myTable2 
LEFT JOIN anotherTable 
    ON myTable.myField=anotherTable.anotherField 
WHERE myTable.id = myTable2.id

但是,这不起作用,我收到有关LEFT JOIN的错误消息。我希望将 myTable2 中的 aSpecificField 添加到两个表的 ID 匹配的行中。

你能帮我正确构建这个查询吗?谢谢你。

4

3 回答 3

1

Microsoft Access 查询设计窗口允许您使用向导或拖放来创建查询。然后,您可以在设计视图中整理 SQL。将表添加到设计网格,将连接字段从一个表拖到下一个,然后选择所需的字段。

如果您希望提高 Access SQL 的知识,您可以阅读...

这些适用于 Jet (<2007),但 ACE (>=2007) 在 SQL 方面并没有什么不同

基础 Microsoft Jet SQL for Access 2000
中级 Microsoft Jet SQL for Access 2000
高级 Microsoft Jet SQL for Access 2000 Jet 数据库引擎

设计背景

关系数据库设计基础,Paul Litwin,2003

经常推荐的 MS Access 书籍

访问食谱

于 2012-10-31T13:41:49.467 回答
0

所以你想返回两个表的 id 匹配的行?而不是他们不匹配的地方?所以不是左连接或右连接,而是普通连接?

Select tab1.*,tab2.* from mytable tab1 
  INNER JOIN mytable2 tab2 
    ON tab1.id = tab2.otherid

或者,如果您有 3 张桌子要加入?

Select tab1.*,tab2.*,tab3.* from mytable tab1 
  INNER JOIN mytable2 tab2 
    ON tab1.id = tab2.otherid 
  INNER JOIN mytable3 tab3 
    ON tab1.id = tab3.anotherid

如果需要,将 tabX.* 替换为特定字段?

于 2012-10-30T14:56:41.253 回答
0

列出您的字段,而不是使用*. 像这样:

SELECT m.Field1, m.Field2, m2.Field1 FROM
MyTable m LEFT JOIN MyTable2 m2 ON m2.ID=m1.ID

根据您的评论,table3 与另一个表有什么关系?只需根据该关系包含它

SELECT m.Field1, m.Field2, m2.Field1, m3.Field1 FROM
MyTable m LEFT JOIN MyTable2 m2 ON m2.ID=m1.ID LEFT JOIN MyTable3 m3 ON m3.ID=m2.ID
于 2012-10-30T14:32:34.893 回答