如果您习惯使用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匹配的行中。
您能帮我正确构建此查询吗?谢谢。
答案 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书籍
答案 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。*替换为特定字段?