microsoftaccesssql查询两表多对一

flvlnr44  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(278)

我有一张艺术品目录表。它将联系人id保存为code39条形码。在初始化时,我需要能够对照contacts表中包含的id检查这个id。每个联系人都有自己的id,并指定一个类型。初始化代码需要填充一个艺术品列表,但只能由类型为“storage”、“show”和“client”的联系人拥有的作品填充。我可以用vba来实现这一点,因为我没有太多的时间编写microsoftsql语句,但是我想把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"
7gcisfzg

7gcisfzg1#

您的问题可能与一个误解有关:在mssqlserver中使用了microsoftsql(又名tsql),但是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"""
b0zn9rqh

b0zn9rqh2#

我接受了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语句本身并不是罪魁祸首。我只需要查看[client art inventory].art\u inventory\u piece,将字段添加到select语句甚至没有意义。似乎我在where语句中的格式(括号)尤其值得责备。

相关问题