programing

SQL: 두 테이블에서 세 번째 테이블과 관련된 데이터를 선택합니다.

goodjava 2023. 1. 4. 20:05

SQL: 두 테이블에서 세 번째 테이블과 관련된 데이터를 선택합니다.

세 개의 테이블이 있습니다.

Table Relations(buyerID INTEGER, sellerID INTEGER)
buyerID and sellerID are foreign keys

+---------+---------+
| buyerID | sellerID|
+---------+---------+
|       1 |       3 |
|       2 |       3 |
|       3 |       2 |
|       4 |       1 |
|       5 |       2 |
+---------+---------+

Table Buyers(ID INTEGER, name VARCHAR(30), phone VARCHAR(10))
ID is a primary key
+----+-------+--------------+
| ID | name  | phone        |
+----+-------+--------------+
|  1 | Eric  | 9872554-1260 |
|  2 | Julia | 897-953-3210 |
|  3 | Josh  | 999-123-3250 |
|  4 | Martha| 098-213-8270 |
|  5 | Jill  | 909-457-3990 |
+----+-------+--------------+

Table Sellers (ID INTEGER, name VARCHAR(30), phone VARCHAR(10))


+---------+----------+--------------+
| ID      | name     | phone        |
+---------+----------+--------------+
|       1 | Nathan   | 321-45-6789  |
|       2 | Rob      | 112-22-3463  |
|       3 | Maria    | 404-040-0804 |
|       4 | Logan    | 305-954-7781 |
|       5 | Smith    | 810-123-5556 |
+---------+----------+--------------+

판매자 ID, 구매자 ID를 출력하기 위해 Relations 테이블을 사용해야 합니다.에이전트 이름별로 정렬된 ID 쌍.기본적으로 Relations 표를 살펴보고, 첫 번째 셀러 ID부터 각 셀러 ID를 선택하고, 모든 관련 구매자와 함께 인쇄한 후 다음 셀러로 넘어갑니다.출력은 다음과 같습니다.

+---------+------------+
|  Seller |    Buyer   |
+---------+------------+
|Maria    |   Eric     |
|Maria    |   Julia    |
|Nathan   |   Martha   |
|Rob      |   Josh     |
|Rob      |   Jill     |
+---------+------------+

현재 사용하고 있는 문장은 다음과 같습니다.

SELECT s.name,b.name FROM Seller s, Buyers b
INNER JOIN Relations r ON (r.sellerID = s.ID )
ORDER BY s.name;

그러나 이것은 "알 수 없는 열 "r.seller"를 제공합니다.'on clause'의 ID 오류 어떻게든 조인을 잘못 사용하고 있다는 것을 알고 있지만, 이제 어떻게 해야 할지 정확히 알 수 있습니다.어떤 도움이라도 감사합니다.

이거면 될 것 같아요.

SELECT
    b.name AS Seller,
    s.name AS Buyer
FROM
    Relations r
LEFT JOIN
    Buyers b
ON
    r.buyerID = b.ID
LEFT JOIN
    Sellers s
ON
    r.sellerID = s.ID
GROUP BY
    b.name,
    s.name
ORDER BY
    b.name,
    s.name

원하는 출력을 정확하게 얻으려면 이 쿼리(SQLFiddle)를 사용합니다.이상한 점이 있습니다.ORDER BYb.name에 의한 정렬에 따라 마지막 2개의 엔트리(셀러 Rob과 일치하는 항목)의 순서가 원하는 항목에 따라 변경됩니다.다만, b.id 대신에 b.name 를 사용하는 것이 좋습니다.

SELECT s.name AS Seller, b.name AS Buyer
FROM Relations r
JOIN Sellers s
ON r.sellerID = s.ID
JOIN Buyers b
ON r.buyerID = b.ID
ORDER BY s.name, b.id

출력:

Seller  Buyer
Maria   Eric
Maria   Julia
Nathan  Martha
Rob     Josh
Rob     Jill

언급URL : https://stackoverflow.com/questions/49888699/sql-select-data-from-two-tables-that-are-related-by-a-third