문제

수십 개의 테이블이있는 관계형 MySQL 데이터베이스가 있습니다 ... 내 쿼리는 길이가 1000 피트이며 거의 모든 테이블에서 데이터를 선택합니다 ... 또한 '메인'테이블도 가지고 있으며 다른 모든 테이블은 그 중 하나를 참조하고 있습니다. 메인 테이블에 한 행을 입력하고 다른 테이블에서 해당 행에 대한 모든 관계를 만들 때 쿼리가 잘 작동합니다. 그러나 메인 테이블에 한 줄을 입력하고 다른 곳이 없으면 빈 세트가 발생합니다. 그러나 나는 내 결과에서 최소한 그 정보를 얻고 싶습니다. 또는 물론, 일부 테이블이 해당 레코드 (행)에 대한 정보가 없다는 사실에 관계없이 다른 테이블에 입력 한 모든 정보는 ...

도와 줘서 고마워!

업데이트:

나는 Join Syntax를 사용하지 않으며 내 쿼리는 이것과 유사하게 보입니다.

$query = "SELECT a.*, b.*, c.*, d.*, e.*, f.*";
$query .= " FROM a, b, c, d, e, f";
$query .= " WHERE a.aID = b.aID";
$query .= " AND b.bID = c.bID";
$query .= " AND b.bID = d.bID";
$query .= " AND b.bID = e.bID";
$query .= " AND b.bID = f.bID";
도움이 되었습니까?

해결책

당신의 질문은 지금은 매우 모호하지만 대부분은 당신이 사용하는 사실 때문일 것입니다. INNER JOIN대신 LEFT JOIN에스.

이 쿼리 :

SELECT  *
FROM    main
JOIN    secondary
ON      secondary.main_id = main.id

만약 그렇다면 아무것도 반환하지 않습니다 secondary 비었다.

이 쿼리 :

SELECT  *
FROM    main
LEFT JOIN
        secondary
ON      secondary.main_id = main.id

돌아올 것입니다 적어도 각 레코드에 대한 한 레코드 main, 2 차 필드를 대체합니다 NULLS 일치 레코드가없는 경우 secondary.

업데이트:

절대적인 JOIN 사용하는 구문 (테이블을 열거하고 제공합니다. JOIN 조건 WHERE 조항) 가정합니다 INNER JOIN에스.

그것을 가정합니다 a "메인"테이블이므로 다음과 같이 쿼리를 다시 작성하십시오.

SELECT  a.*, b.*, c.*, d.*, e.*, f.*
FROM    a
LEFT JOIN
        b
ON      b.aID = a.aID
LEFT JOIN
        с
ON      c.bID = b.bID
LEFT JOIN
        d
ON      d.bID = b.bID
LEFT JOIN
        e
ON      e.bID = b.bID
LEFT JOIN
        f
ON      f.bID = b.bID
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top