如何使用SQL连接来自两个不同表的信息

如何使用SQL连接来自两个不同表的信息,sql,Sql,我试图从两个不同的表返回数据,并从返回的数据中筛选出一些数据。我有一个publisher表和一个author表。 我得到一个错误: MySQL编号:1064 MySQL错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第4行的“IL”和“p.state=”IL“按p.name、p.city、a.name、a.city、a.state的顺序使用的正确语法 SQL:从发布者p中选择p.name、p.city、a.name、a.city、a.state,然后加入作者a ON(p

我试图从两个不同的表返回数据,并从返回的数据中筛选出一些数据。我有一个publisher表和一个author表。 我得到一个错误:

MySQL编号:1064 MySQL错误:您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解第4行的“IL”和“p.state=”IL“按p.name、p.city、a.name、a.city、a.state的顺序使用的正确语法 SQL:从发布者p中选择p.name、p.city、a.name、a.city、a.state,然后加入作者a ON(p.state=a.state),其中a.city='Chicago AND a.state='IL'和p.state='IL'按p.name、p.city、a.name、a.city、a.state排序 MySQL受影响的行:-1

SQL


在状态上连接不需要执行a.state='IL'和p.state='IL'。 尝试这样做:

SELECT P.NAME, P.CITY, A.NAME, A.CITY, A.STATE
FROM PUBLISHER P, AUTHOR A
WHERE A.STATE = P.STATE 
AND A.CITY = "Chicago"
AND A.STATE = "IL"
ORDER BY P.NAME, P.CITY, A.NAME, A.CITY, A.STATE

当您执行此查询时,您遇到了什么错误,因为查询对我来说是正确的?看起来不错,您可以将id更改为和(1,3)中的P.pub_id,否则看起来很好谢谢Brad。我在想,有一种更短或更好的方式来写同样的声明。我很感谢您的输入。Rajen,没有错误,只是认为有一种更有效的方法来编写相同的语句,这样就不会太长。您的错误表明您在芝加哥之后缺少了一个报价,但您的示例查询没有。下次,先发布您的实际查询和错误,而不是在以后编辑它们或尝试生成类似的查询。嘿,代码!谢谢你的意见。有两件事:1)我需要为作者返回一个城市,为作者和出版商返回相同的州。你的答案符合这个标准吗?另外,如果不使用JOIN,SQL如何知道如何组合这两个表的数据,因为我在您的答案中没有看到任何形式的JOIN?提前谢谢你!1) 是,这符合您的条件,此查询仅返回将芝加哥作为作者城市且作者和出版商的州均为“IL”的元组,这是由于加入原因,因为如果您说作者的州必须等于出版商的州且作者的州必须为“IL”,则您将拥有“IL”作者和出版商都可以@TRS72)连接条件是a.state=p.state,这是一种自然连接,dbms中有一个名为optimizer的模块(并非所有dbms都有),用于转换您在查询的内部表示中编写的内容。我从不在条件下使用Join,在Oracle、MySql、PostgresSQL和school:)中不这样做,如果您在优化器上编写Join,它就会起作用@TRS7
SELECT P.NAME, P.CITY, A.NAME, A.CITY, A.STATE
FROM PUBLISHER P, AUTHOR A
WHERE A.STATE = P.STATE 
AND A.CITY = "Chicago"
AND A.STATE = "IL"
ORDER BY P.NAME, P.CITY, A.NAME, A.CITY, A.STATE