【问题标题】:I can't join multiple tables on SQL我无法在 SQL 上连接多个表
【发布时间】:2014-02-03 02:04:19
【问题描述】:

在某些情况下,我需要将四张表合并为一张,但我只能将其中三张合并,即使我在第四张表上所做的一切都完全相同。有人可以帮我解决这个问题吗?如果我删除最后一段,它会起作用,但如果我把它留在那里,它会说“JOIN 操作中的语法错误”。

SELECT Leidinys, ISSN, Pobudis

FROM ((Leidinio_ID_Leidinys 
       LEFT JOIN (Leidinio_ID_ISSN_ID 
                  LEFT JOIN ISSN_ID_ISSN 
                         ON  Leidinio_ID_ISSN_ID.ISSN_ID = ISSN_ID_ISSN.ISSN_ID) 
              ON (Leidinio_ID_Leidinys.Leidinio_ID = Leidinio_ID_ISSN_ID.Leidinio_ID))

LEFT JOIN ((Leidinio_ID_Pobudzio_ID 
            LEFT JOIN  Pobudzio_ID_Pobudis 
                   ON Leidinio_ID_Pobudzio_ID.Pobudzio_ID = Pobudzio_ID_Pobudis.Pobudzio_ID)) 
       ON (Leidinio_ID_Leidinys.Leidinio_ID = Leidinio_ID_Pobudzio_ID.Leidinio_ID))

LEFT JOIN ((Leidinio_ID_Metai_ID 
            LEFT JOIN  Metai_ID_Prieigos_Metai 
                   ON Leidinio_ID_Metai_ID.Metai_ID = Metai_ID_Prieigos_Metai.Metai_ID) 
           ON (Leidinio_ID_Leidinys.Leidinio_ID = Leidinio_ID_Metai_ID.Leidinio_ID))

【问题讨论】:

  • 最奇怪的加入我一开始还以为是 ORM 的东西。
  • 如果您格式化您的代码,您可能会发现一些导致问题的额外括号。我不确定你为什么要使用括号,它们不是必需的。
  • codinghorror.com/blog/2007/10/… 这样做并在 ON 条件后添加另一个 JOIN 等。
  • @user3195619 你以为这不依赖于RDBMS,但为什么拒绝分享呢?它有助于给你一个更好的答案
  • @CRAFTYDBA op 没有使用旧式连接,她/他只是奇怪地将它们括在括号中。但是那里没有*==*

标签: mysql sql sql-server join


【解决方案1】:

我敢打赌,你的括号不同步

您需要第一个 FROM 之后的第一个括号来包含所有 3 个“左连接”子句,因此您需要 1)复制到剪贴板然后删除最后一个“左连接子句” 2) 在最后一个括号前面插入复制的代码

根据提供的信息,这是我最好的猜测,祝你好运

【讨论】:

  • 我的父母不同步?我想这就是他们离婚的原因。
  • 或者,只需删除最后一行的第一个左括号和最后一个右括号。但是,我认为值得一提的是,根本不需要括号,这种语法实际上可以在 MySQL 或 SQL Server 中工作。
  • 至少当涉及到视图时,mysql 在幕后添加了括号,所以如果您从现有视图中检索代码开始,您要么需要使用它们,要么花费(浪费?)时间删除它们(只有在应用定义视图的代码后才让 mysql 再次添加它们)
  • 啊,我不知道。但是,嘿,如果它是一个视图定义并且您删除了所有括号并更新了视图,那么 MySQL 至少会正确地将它们添加回来,不是吗?在您搞砸之前,无需猜测您或某个人 - 所以,在某种程度上,也有一些解决方案。
【解决方案2】:

不是一个完整的答案,而是一个指针,表名彼此非常相似,而且它们不是英文的,所以有点挣扎,但这是你需要做的事情。

一次在两个表之间加入,然后在ON子句中提及它们的加入条件

SELECT Leidinys, ISSN, Pobudis
FROM Leidinio_ID_Leidinys LEFT JOIN Leidinio_ID_ISSN_ID    --<-- Two Table in JOIN 
ON Leidinio_ID_Leidinys.Leidinio_ID = Leidinio_ID_ISSN_ID.Leidinio_ID  --<-- Condition on you want to join these table
LEFT JOIN ISSN_ID_ISSN                                 --<-- result set on 1st join, joins with this table
ON  Leidinio_ID_ISSN_ID.ISSN_ID = ISSN_ID_ISSN.ISSN_ID  --<-- condition on which you want to join the result set and this table ... and so on ....
LEFT JOIN Leidinio_ID_Pobudzio_ID 
ON Leidinio_ID_Leidinys.Leidinio_ID = Leidinio_ID_Pobudzio_ID.Leidinio_ID
LEFT JOIN  Pobudzio_ID_Pobudis 
ON Leidinio_ID_Pobudzio_ID.Pobudzio_ID = Pobudzio_ID_Pobudis.Pobudzio_ID
.
...... Join with other tables along with their joining conditions and so on.....

然后在您的 Select 语句中,您还需要提及 TableName.Column 名称,因为您在 Select 语句中提到的列名存在于多个表中,您需要告诉 sql server 从哪个表中您需要该特定列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-03
    • 2011-05-03
    相关资源
    最近更新 更多