从左边连接的2个表中选择

时间:2012-10-30 14:30:50

标签: sql ms-access

如果您习惯使用SQL,这可能很简单,我不是。

我有这个问题:

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

实际上,此查询返回myTable中符合 join条件的所有内容(据我的理解而言)。此查询很有用,但我想从另一个表中选择另一个字段。我想做的是这样的事情:

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匹配的行中。

您能帮我正确构建此查询吗?谢谢。

3 个答案:

答案 0 :(得分:1)

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

如果您希望提升对Access SQL的了解,可以阅读...

这些适用于Jet(< 2007),但ACE(> = 2007)与SQL

没有什么不同

Fundamental Microsoft Jet SQL for Access 2000
Intermediate Microsoft Jet SQL for Access 2000
Advanced Microsoft Jet SQL for Access 2000 Jet Database Engine

设计背景

Fundamentals of Relational Database Design, Paul Litwin, 2003

经常推荐的MS Access书籍

Access cookbook

答案 1 :(得分: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

答案 2 :(得分: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。*替换为特定字段?