-2


好的,所以我创建了一个名为 news 的数据库,其中包含几个表,其中包含不同的信息。我有两张表,一张名为Employee,另一张表名为Article

现在我想从员工表中收到姓名(员工的姓名)和职务。从文章表中,我希望它显示每个员工自从通过 ArticleID 连接以来一直在阅读和撰写的文章类型。但我只想显示一个特定的 ArticleID,例如数字 2。这是我想显示的输出示例。

                   Titel         Name            ArticleID   
                   Redirector    Jonas              2
                   journalist    Clark              2
                   journalist    Louise             2      



这就是我的 SQL 代码已经走了多远,但我无法让它工作,我得到的错误是 p.Employee 不存在。

 SELECT p.Titel, p.Name, ap.ArticleID
    FROM Employee p join
         Article ap
         on p.Employee  = ap.Article
    WHERE ap.ArticleID IN (2);

对此提供一些帮助将不胜感激。

编辑 ----------------- 表结构的外观。对于给您带来的不便,我深表歉意。

表员工

EmployeeID  Name    UserName    Pass      Titel         PhoneNumer 
    1       Clark    xxxxxx      a      journalist       12356465
    2       Louise   aaaaaa      b      journalist       45648984
    3       Jonas    bbbbbb      c      Redirector       489489448

表文章

 ArticleID      KategoriID       preamble    Body   headlines         Published
    1              1             dwadwad
    2              2              qweqw
    3              3              dwqdqw
4

2 回答 2

5

您的查询现在看起来就像通过 Employee.Employee 和 Article.Article 连接表。

您描述它的方式,链接在 ArticleID 上,所以听起来应该是:

SELECT 
  p.Titel, p.Name, ap.ArticleID
FROM 
  Employee p 
  INNER JOIN Article ap
     ON p.ArticleID  = ap.ArticleID
WHERE 
  ap.ArticleID IN (2); -- Or just ` = 2`

但我怀疑一个 Employee 可以写多篇文章,在这种情况下,Article 有一个 EmployeeID 更有意义,而 EmployeeID 定义了关系:

SELECT 
  p.Titel, p.Name, ap.ArticleID
FROM 
  Employee p 
  INNER JOIN Article ap
     ON p.EmployeeID  = ap.EmployeeID
WHERE 
  ap.ArticleID IN (2); -- Or just ` = 2`

尽管多个员工可以共同撰写一篇文章也是合理的。因此,如果您还希望一名员工撰写多篇文章,您将需要一个junctions table,您的查询将如下所示:

SELECT 
  p.Titel, p.Name, ap.ArticleID
FROM 
  Employee p 
  INNER JOIN EmployeeArticle ea
     ON ea.EmployeeID = p.EmployeeID
  INNER JOIN Article ap
     ON ap.ArticleID  = ea.ArticleID
WHERE 
  ap.ArticleID IN (2); -- Or just ` = 2`

在最后一种情况下,EmployeeArticle 将只包含两个字段,EmployeeID 和 ArticleID,以允许您将多个员工链接到多个文章(n..m 关系)。如果您不需要 Article 本身的任何字段,则可以省略加入Article并只写:

WHERE 
  ea.ArticleID IN (2); -- Or just ` = 2`

毕竟,ID 已经存在于联结表中。

于 2013-08-08T08:07:19.140 回答
1

需要连接ON表列。我认为表 Employee 没有列 Employee 和 Article ...列 Article。

SELECT p.Titel, p.Name, ap.ArticleID
    FROM Employee p join
         Article ap
         on p.ArticleID = ap.ID -- for relation Article 1 : N Employee
       --on p.ID = ap.RefToEmployee -- for relation Article N : 1 Employee
    WHERE ap.ArticleID = 2;

编辑(发布表结构后):

SELECT p.Titel, p.Name, ae.ArticleID
    FROM Article_Employee ae join
         Employee p
         on p.EmployeeID = ae.EmployeeID
    WHERE ae.ArticleID = 2;
于 2013-08-08T08:03:22.497 回答