나는 'papers'(P), 'authors'(A) 및 'authors__papers'(AP)가있는 테이블 하나에 3 개의 테이블이 있습니다. 게다가. 필요한 것은 작성자 이름이 하나의 열이며, 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