【问题标题】:How to JOIN information from two different tables using SQL如何使用 SQL 连接来自两个不同表的信息
【发布时间】:2018-06-21 12:31:49
【问题描述】:

我正在尝试从两个不同的表返回数据,并过滤掉一些返回的数据。我有一个发布者表和一个作者表。 我收到一个错误:

MySQL 编号:1064 MySQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在 'IL' AND p.state = 'IL' ORDER BY p.name, p.city, a.name, a.city, a.state' 附近使用的正确语法在第 4 行 SQL: SELECT p.name, p.city, a.name, a.city, a.state FROM publisher p JOIN author a ON (p.state= a.state) WHERE a.city = 'Chicago AND a.state = 'IL' AND p.state = 'IL' 按 p.name、p.city、a.name、a.city、a.state 排序 MySQL 受影响的行:-1

SQL

 SELECT p.name, p.city, a.name, a.city, a.state
FROM publisher p JOIN author a
            ON (p.state= a.state)
WHERE  a.city = 'Chicago' AND a.state = 'IL' AND  p.state = 'IL'
ORDER BY  p.name, p.city, a.name, a.city, a.state;

【问题讨论】:

  • 您在执行此查询时遇到了什么错误,因为查询对我来说是正确的?
  • 看起来不错,您可以将 id 更改为 AND P.pub_ID IN (1, 3) 否则看起来不错
  • 谢谢布拉德。我在想有一个更短或更好的方式来写同样的声明。感谢您的意见。
  • Rajen,没有错误,只是认为有一种更有效的方法来编写相同的语句,所以它不会那么冗长。
  • 您的错误表明您在芝加哥之后缺少报价,但您的示例查询不是。下次,先发布您的实际查询和错误,而不是事后编辑它们或尝试生成类似的。

标签: sql


【解决方案1】:

加入状态没有必要执行 a.state = 'IL' AND 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

【讨论】:

  • 嘿GJCode!感谢您的输入。有几件事:1)我需要为作者返回一个城市,为作者和出版商返回同一个州。你的答案符合这个标准吗?另外,如果不使用 JOIN,SQL 如何知道将 2 个表数据组合在一起,因为我在您的答案中看不到任何形式的 JOIN?提前谢谢!
  • 1) 是的,这符合您的条件,此查询仅返回以芝加哥为作者城市和状态为“IL”的作者和出版商的元组,这是由于加入,因为如果您说作者的状态必须等于出版商的状态,作者的状态必须是“IL”,作者和出版商都有“IL”。 @TRS7
  • 2) 连接条件是 a.state = p.state,这是一个自然连接,在 dbms 中有一个称为优化器的模块(并非所有 dbms 都有),它可以翻译你写的内容查询的内部表示。我从不在条件下使用 Join,而不是在 Oracle、MySql、PostgresSQL 和学校 :) 并且如果你写 Join On 优化器会做我做的事情,这很有效。 @TRS7
猜你喜欢
  • 1970-01-01
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 2018-04-27
相关资源
最近更新 更多