我有4个表格,其列如下:
links: authID1, authID2, pubID
authors: authorName, authorID
publications: pubID, pubTitle
我希望获得合作作者的姓名对,并且已经可以使用以下代码来获取姓名:
SELECT
o.authorName AS 'authname1',
p.authorName AS 'authname2'
FROM links e
JOIN authors o
ON (e.authID1 = o.authorID)
JOIN authors p
ON (e.authID2 = p.authorID)
JOIN publications j
ON (e.pubID = j.pubID)
WHERE ( j.pubTitle LIKE '%computers%')
我当前的难题是如何获取名称对并在从发布表中获取匹配的记录时执行 LIMIT 函数。
我已经能够使用下面的两个表来做到这一点,但是我无法弄清楚3个表并两次调用一个表(authors表)。
这是我想做的一个例子:
SELECT e.authID1, e.authID2
FROM links AS e
INNER JOIN
(SELECT pubID
FROM publications
WHERE ( j.pubTitle LIKE '%computers%')
LIMIT 4) as j
ON e.pubID = j.pubID
答案 0 :(得分:1)
您可以创建一个函数以返回作者姓名。经验:
create function get_author_name (id int ) returns varchar(255)
BEGIN
DECLARE author_name varchar(255);
SELECT authorName INTO author_name
FROM authors
WHERE authorID = id;
RETURN author_name;
END;
然后使用它
SELECT e.authID1, e.authID2, get_author_name(e.authID1) as author1, get_author_name(e.authID2) as author2
FROM links AS e
INNER JOIN
(SELECT pubID
FROM publications
WHERE ( j.pubTitle LIKE '%computers%')
LIMIT 4) as j
ON e.pubID = j.pubID
答案 1 :(得分:1)
如果问题仅在于SQL语法,则应为解决方案:
SELECT DISTINCT
o.authorName AS 'authname1',
p.authorName AS 'authname2'
FROM links e
INNER JOIN authors o
ON e.authID1 = o.authorID
INNER JOIN authors p
ON e.authID2 = p.authorID
INNER JOIN (SELECT DISTINCT pubID
FROM publications
WHERE ( j.pubTitle LIKE '%computers%')
LIMIT 4) as j
ON e.pubID = j.pubID
我添加了2个DISTINCT
,以确保您没有检索重复的记录。