我有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