我有3个表,一个'papers'(P),一个'authors'(A),另一个'authors__papers'(AP),这是一个查询表和其他一些值以及。我需要的是一个单一的查询,它给了我一列包含AP = 0中'is_contact_author'字段的作者姓名,另一列中所有作者姓名(连续),其中AP.author_order> 0。 P.paper_id。在MYSQL查询中冲突where子句
本身每个查询的样子:
SELECT CONCAT(A.first_name,' ',A.last_name) as contact FROM authors A
join authors__papers AP on AP.author_id = A.author_id
WHERE AP.is_contact_author = 0
和:
SELECT AP.paper_id, GROUP_CONCAT(CONCAT(A.first_name,' ',A.last_name) ORDER BY AP.author_order SEPARATOR ', ') as authors FROM authors A
join authors__papers AP on AP.author_id = A.author_id
WHERE AP.author_order > 0
GROUP BY AP.paper_id
每个那些回报的预期单独的结果。我尝试了一个子查询:
SELECT * FROM
(
SELECT CONCAT(A.first_name,' ',A.last_name) as contact FROM authors A
join authors__papers AP on AP.author_id = A.author_id
WHERE AP.is_contact_author = 1
) contact,
(
SELECT AP.paper_id, GROUP_CONCAT(CONCAT(A.first_name,' ',A.last_name) ORDER BY AP.author_order SEPARATOR ', ') as authors FROM authors A
join authors__papers AP on AP.author_id = A.author_id
WHERE AP.author_order > 0
GROUP BY AP.paper_id
) author_info
但是,挂起(或可能只是真的很慢)。任何想法如何最好地从一个结果集中的两个查询中获取此输出?每篇论文都有一个联系人和至少一个作者。联系人的author_order始终为0,作者为1到X.联系人的is_contact_author始终为1,对于作者始终为0(如果有帮助或重要)。
您应该使用明确的'join'语法('select..from..join..on..')。你现在有一个没有条件的隐式连接,这导致了一个笛卡尔积。 – HoneyBadger