【问题标题】:Msg 4104 using INNER JOINS - SQL SERVER 2012使用内部联接的消息 4104 - SQL SERVER 2012
【发布时间】:2013-04-21 00:02:42
【问题描述】:

我有这些表:

我正在尝试通过使用连接表 user_articlesarticlesusernameusers 获取 article_id, article_name, article_title, article_descriptionarticle_date

我试过这段代码:

SELECT E.article_id, E.article_title, E.article_description, E.article_date, u.username
FROM articles AS E, users as u
INNER JOIN user_articles as A ON A.article_id = E.article_id
INNER JOIN users as u2 ON u2.user_id = A.user_id
WHERE E.article_status = 1

我收到此错误消息:

Msg 4104, Level 16, State 1, Line 3
The multi-part identifier "E.article_id" could not be bound.

我正在使用 SQL Server 2012 Express。

【问题讨论】:

标签: sql tsql sql-server-2012-express


【解决方案1】:

您不能从一个表中选择并在另一个表上应用联接。试试这个查询:

SELECT E.article_id, E.article_title, E.article_description, E.article_date, u.username
FROM articles AS E
    INNER JOIN user_articles as A ON A.article_id = E.article_id
    INNER JOIN users as u ON u.user_id = A.user_id
WHERE E.article_status = 1

【讨论】:

  • 可行,但是,如果有 5 个输入的 article_status 为 1,则只显示 1 个
  • 所有这些文章都与用户相关联吗?如果没有,你可以使用left outer join,但是你会得到null,当然u.username
  • 是的,它们通过user_articles 表与user_idarticle_id 相关联
  • “从一个表中选择并在另一个表上应用连接”是什么意思?问题中的问题是逗号的优先级低于关键字连接。
【解决方案2】:

问题是你混合了 JOIN 类型,你有逗号分隔的隐式 JOIN 和显式 JOIN。你的代码应该是:

SELECT E.article_id, 
  E.article_title, 
  E.article_description, 
  E.article_date, 
  u.username
FROM articles AS E
INNER JOIN user_articles as A 
  ON A.article_id = E.article_id
INNER JOIN users as u
  ON A.user_id = u.user_id
WHERE E.article_status = 1;

【讨论】:

    【解决方案3】:

    我在想为什么你甚至需要这样的表格:users_articles? 将名为 (article_author) 的列添加到使用用户 ID 填充的文章表中不是更有效吗?然后你可以在这个值上加入。只是​​说

    【讨论】:

      猜你喜欢
      • 2016-02-21
      • 2015-07-24
      • 1970-01-01
      • 2012-01-28
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2014-07-10
      相关资源
      最近更新 更多