如何 INNER JOIN 4 个表?

Posted

技术标签:

【中文标题】如何 INNER JOIN 4 个表?【英文标题】:How to INNER JOIN 4 tables? 【发布时间】:2016-10-19 10:57:55 【问题描述】:

我必须创建一个将数据库连接到 java gui 的地址簿应用程序。我现在正在研究我的搜索按钮,几乎得到了它,但无法弄清楚如何连接所有四个表。我需要按姓氏搜索,然后我希望它显示该人的所有相关信息。

到目前为止,这就是我所拥有的,它似乎正在工作,但是当我尝试 INNER JOIN emailAddresses 和 phoneNumbers 时,我收到了语法错误。

resultSet =
    statement.executeQuery( "SELECT * FROM names INNER JOIN addresses ON names.personID = addresses.personID WHERE lastName LIKE '%" + last + "%' ");
            resultSet.next();
            jTextField1.setText(resultSet.getString("firstName"));
            jTextField2.setText(resultSet.getString("lastName"));
            jTextField3.setText(resultSet.getString("address1"));
            jTextField4.setText(resultSet.getString("address2"));
            jTextField5.setText(resultSet.getString("city"));
            jTextField6.setText(resultSet.getString("state"));
            jTextField7.setText(resultSet.getString("zipcode"));
            jTextField8.setText(resultSet.getString("phoneNumber"));
            jTextField9.setText(resultSet.getString("emailAddress"));

【问题讨论】:

您应该编辑问题并提供示例数据和所需结果。我怀疑JOIN 是你真正想要的。 如果您只需要连接多个表,那么 google 中有很多教程。 【参考方案1】:

您需要添加括号并使用* 而不是% 作为通配符。 我还没有测试过,但这应该可以工作:

"SELECT     *
FROM    ((names INNER JOIN addresses ON names.personID = addresses.personID)
                INNER JOIN emailadresses ON names.personID = emailadresses.PersonID)
                INNER JOIN PhoneNumbers ON names.PersonID = PhoneNumbers.PersonID
WHERE   lastName LIKE '*" & last & "*'" 

说它应该有效 - 记得在任何姓氏中转义撇号。Escaping ' in Access SQL

【讨论】:

谢谢!我觉得我快到了,只是现在我收到了 INVALID CURSOR STATE 错误 我无法添加 '&' 我会得到编译器错误作为错误的操作数类型 那一定是 Java - 抱歉,应该说我将它写为 VBA 文本字符串。我猜在 Java 中你使用 + (你可以在 VBA 中,但可能最终将两个部分相加而不是连接)。【参考方案2】:
SELECT * FROM names A
INNER JOIN address B ON A.personID = B.personID
INNER JOIN emailAddress C ON A.personID = C.personID
INNER JOIN phoneNumbers D ON A.personID = D.personID

【讨论】:

虽然此代码可能有助于解决问题,但它并没有解释为什么和/或如何回答问题。提供这种额外的背景将显着提高其长期教育价值。请edit您的答案添加解释,包括适用的限制和假设。【参考方案3】:

试试这个 SQL 命令,连接四张表和连接一张表或连接多张表是一样的:

SELECT firstName, lastName, address1, address2, city, state, zipcode, phoneNumber, emailAddress FROM names INNER JOIN addresses ON names.personID = addresses.personID INNER JOIN emailadresses ON names.personID = emailadresses.PersonID INNER JOIN PhoneNumbers ON names.PersonID = PhoneNumbers.PersonID WHERE lastName LIKE '%parameter%'

【讨论】:

我试过了,但由于某种原因,我不断收到语法错误。它让我发疯,我不知道它为什么这样做。它只是说 ACCESS DATABSE(缺少运算符)语法错误 - 并列出了我的 select 语句 - 我已经重新检查了 5 次,一切看起来都很好 您是否有一个字符数有限的变量?例如需要将 NVARCHAR(200) 设置为更大的值 NVARCHAR(4000)?只是猜测!

以上是关于如何 INNER JOIN 4 个表?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL INNER JOIN 3 个表的计数和总数

来自第二个表的 MySQL INNER JOIN (TOP10)

由 INNER JOIN-ing 3 个表产生的记录集不可更新

26.MySQL中的内连接INNER JOIN

如何在以下条件下为 4 个表编写 JOIN QUERY

如何按条件在不同字段上进行 INNER JOIN