好吧,所以我创建了一个名为news的数据库,其中包含几个包含不同信息的表。我有两个表名为员工,另一个表名为文章。
现在我想从员工表中获得的是姓名(员工姓名)和职称。从Article表中我希望它显示每个Employee一直在写什么类型的文章,因为它们是通过ArticleID连接的。但我只想要一个特定的ArticleID来显示例如numer 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
答案 0 :(得分: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`
但是我怀疑一个员工可以写多篇文章,在这种情况下,一篇文章有一个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`
虽然多名员工可以共同撰写文章也是合理的。因此,如果您还希望有一个员工写多篇文章的可能性,那么您需要一个联结表,您的查询将如下所示:
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
的联接,并写下:
WHERE
ea.ArticleID IN (2); -- Or just ` = 2`
毕竟,ID已存在于联结表中。
答案 1 :(得分:1)
需要加入ON
表格列。我认为表Employee没有列Employee和Article ... column 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;