Microsoft Access SQL查询多对一的两个表

时间:2018-01-02 03:41:24

标签: mysql sql vba ms-access

我有一张艺术品库存表。它将联系人ID保存为code39条形码。在初始化时,我需要能够针对联系人表中包含的ID检查此id。每个联系人都有自己的ID,并被指定为一种类型。初始化代码需要填充艺术作品列表,但只能填充由“存储”,“显示”和“客户”类型的联系人拥有的部分。我可以VBA这个,因为我没有很多编写时间来编写Microsoft SQL语句,但我想让sql失效。联系人可以通过不确定数量的艺术作品参考。

这些陈述不起作用:\

strSQL = "SELECT [art_inventory_piece], [art_inventory_contact_id_code39]" & _
" FROM [Client Art Inventory] INNER JOIN [Client Contact]" & _
" ON [Client Art Inventory].art_inventory_contact_id_code39 = [Client Contact].contact_id_code39" & _
" WHERE [Client Contact].client_type = 'storage' or [Client Contact].client_type = 'show' or [Client Contact].client_type = 'client'"


strSQL = "SELECT [art_inventory_piece], [art_inventory_contact_id_code39]" & _
" FROM [Client Art Inventory]" & _
" WHERE [art_inventory_contact_id_code39]" & _
" in (select [contact_id_code39] from [Client Contact] where [contact_type]
  = 'storage' OR [contact_type] = 'show' OR [contact_type] = 'client')" & _
" ORDER BY [contact_id] ASC"

2 个答案:

答案 0 :(得分:1)

我接受了TBridges的建议并使用了我从未使用过的查询生成器。经过一点点捣乱之后,用双引号吐出来。我把兔子耳朵放回去了。问题似乎是,我没有从两个表中选择,因为我在逐步思考。

strSQL = "SELECT [Client Art Inventory].art_inventory_contact_id_code39, [Client Art Inventory].art_inventory_piece," & _
        " [Client Contact].contact_id_code39, [Client Contact].contact_type" & _
        " FROM [Client Art Inventory] INNER JOIN [Client Contact]" & _
        " ON [Client Art Inventory].art_inventory_contact_id_code39 = [Client Contact].contact_id_code39" & _
        " WHERE ((([Client Contact].contact_type)='storage' Or ([Client Contact].contact_type)='show' Or ([Client Contact].contact_type)='client'))"

[编辑]

第二次看问题后,显然select语句本身并不应该受到指责。我只需要查看[客户艺术库存] .art_inventory_piece并将字段添加到select语句中甚至没有意义。似乎我在where语句中的格式化(包围)特别值得责备。

答案 1 :(得分:0)

可能您的问题与误解有关:Microsoft SQL(也称为TSQL)用于MS SQL Server,但Access中的SQL却完全不同。

没有看到你用strSQL实际做了什么(用DoCmd.RunSQL在本地运行,或者将它传递给你的MySQL实例),这只是猜测,但我会看看你是怎么回事划定你的字符串。 MS Access使用双引号,正确的SQL使用单引号。

尝试

strSQL = "SELECT [art_inventory_piece], [art_inventory_contact_id_code39]" & _
" FROM [Client Art Inventory] INNER JOIN [Client Contact]" & _
" ON [Client Art Inventory].art_inventory_contact_id_code39 = [Client Contact].contact_id_code39" & _
" WHERE [Client Contact].client_type = ""storage"" or [Client Contact].client_type = ""show"" or [Client Contact].client_type = ""client"""