SQL 如何 INNER JOIN 4 个表?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/40129475/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-01 04:57:12  来源:igfitidea点击:

How to INNER JOIN 4 tables?

sqlms-access

提问by Mrs.Brightside

I had to create an addressbook application connecting a database to a java gui. I'm working on my search button right now and almost got it but cant figure out how to connect all four tables. I need to search by a last name and then I want it to show all related information from that person.

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

enter image description here

enter image description here

So far this is what I have and it seems to be working but when I try to INNER JOIN emailAddresses and phoneNumbers I get a syntax error.

到目前为止,这就是我所拥有的,它似乎正在工作,但是当我尝试 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"));

回答by Darren Bartrup-Cook

You'll need to add brackets and use *rather than %as the wildcard.
I haven't tested, but this should work:

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

"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 & "*'" 

Saying it should work - remember to escape the apostrophe in any last name.
Escaping ' in Access SQL

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

回答by Esty

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

回答by Zeina

try this SQL Command, joining four tables is the same as joining one table or joining many more tables:

试试这个 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%'

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%'