私は、 'papers'(P)、 'authors'(A)、 'authors__papers'(AP)の3つのテーブルを持っています。同じように。私が必要とするのは、著者名が1つの列に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
しかし、それはハングアップ(または多分本当に遅いです)。 1つの結果セット内の両方のクエリからこの出力を得るにはどのようなアイデアが必要ですか?すべての論文には1人の連絡先と少なくとも1人の著者がいます。連絡先のauthor_orderは常に0であり、著者は1からXまでです。連絡先のis_contact_authorは常に1であり、作成者の場合はそれが役立つか重要な場合は常に0になります。
明示的な 'join'構文(' select..from..join..on..')を使うべきです。条件なしで暗黙的に結合すると、デカルト積になります。 – HoneyBadger