使用 SQL 和 Access 查询多个表并显示结果

Querying multiple tables and displaying the outcome wtih SQL and Access

我需要在列表框中显示已购买产品(基于用户搜索)的客户。我在 Access 中有五个不同的表,它们存储不同的信息并通过 ID 相互关联(使用 vb 中的组合框)。我需要能够搜索产品,例如 "White Bread",然后程序应显示存储在数据库中的客户全名和地址。

Table: TransactionDetails
Fields: ID, stockID, custTransID

Table: CustomerTransaction
Fields: ID, custID, dateOfTransaction

Table: CustomerAccountDetails
Fields: ID, custFullName, custAddress, custLandline, 
        custMobile, custDOB, custCreditDetails

Table: StockDescription
Fields: ID, stockName, stockDesc, stockPrice

Table: SupplierDetails
Fields: ID, supplierName, supplier Address

我想我需要使用 INNER JOIN 一次查询多个表,但我不确定语法(我是 SQL 的新手)。到目前为止我有这个:

Dim productSearch As String

    productSearch = productSrchInput.Text

    Dim databaseConnection As New OleDb.OleDbConnection
    Dim counter As Integer
    Dim array(10) As String

    databaseConnection.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=assignment5database.accdb"

    databaseConnection.Open()

    Dim searchDatabase As OleDbCommand = New OleDbCommand("SELECT CustomerAccountDetails.custFullName, CustomerAccountDetails.custAddress " & _
                                                          "FROM CustomerAccountDetails " & _
                                                          "INNER JOIN StockDescription ON TransactionDetails.stockID = TransactionDetails.custTransID " & _
                                                          "WHERE StockDescription.stockName = '" & productSearch & "'", databaseConnection)
    Dim searchResults As OleDbDataReader = searchDatabase.ExecuteReader

    counter = 1

    Do While searchResults.Read
        srchResultsList.Items.Add(searchResults.Item(0))
        counter += 1
    Loop
    databaseConnection.Close()

我认为您可以使用内部联接,但也许 "union" 可能更有效。

http://www.w3schools.com/sql/sql_union.asp对提高sql知识很有帮助,对我帮助很大

您缺少一些将客户连接到库存详细信息的联接。这是 Access 期望的 SQL,以便根据您的描述提取数据。如果您习惯于 SQL 服务器或 MySQL,括号可能看起来无关紧要,但如果您将它们排除在外,Access 会出现问题。

SELECT CustomerAccountDetails.custFullName, CustomerAccountDetails.custAddress, StockDescription.stockName
FROM StockDescription 
    INNER JOIN ((CustomerAccountDetails 
    INNER JOIN CustomerTransaction ON CustomerAccountDetails.ID = CustomerTransaction.custID) 
    INNER JOIN TransactionDetails ON CustomerTransaction.ID = TransactionDetails.custTransID) ON StockDescription.ID = TransactionDetails.StockID
WHERE StockDescription.stockName="something"

正如 Fionnuala 所指出的,在将其放入代码之前,我几乎总是会使用 Access 查询设计器构建一个包含多个联接的查询。我几乎总是省略一组括号或尝试以 SQL 服务器期望并被 Access 拒绝的结构编写查询。