Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: [SQL 8.2] Đối chiếu giao dịch với danh mục (FULL JOIN)

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 8: JOIN - Kết hợp bảng — khóa SQL

    Cuối ngày, bộ phận vận hành đối chiếu hai nguồn cho các tài khoản có account_id từ 1 đến 6:

    • nguồn A: các cặp (account_id, symbol) đã từng có giao dịch khớp (từ Trades qua Orders);
    • nguồn B: các cặp (account_id, symbol) đang nằm trong Portfolio.

    Dùng FULL OUTER JOIN để liệt kê mọi cặp xuất hiện ở ít nhất một nguồn, kèm cột recon: 'BOTH' (có ở cả hai), 'TRADED_ONLY' (chỉ có giao dịch, đã không còn trong danh mục), 'HELD_ONLY' (chỉ có trong danh mục, chưa từng giao dịch trong sổ lệnh).

    MySQL không có FULL JOIN: dùng LEFT JOIN hợp (UNION/UNION ALL) với phần "chỉ có ở bên phải" của RIGHT JOIN ... WHERE ... IS NULL. Hai cách phải cho cùng kết quả.

    Sắp xếp theo account_id, rồi symbol tăng dần.

    • Định dạng đầu vào:

      Trades, Orders, Portfolio.

    • Định dạng đầu ra:

      account_id, symbol, recon; sắp theo account_id, symbol.

    Ví dụ:

    Đầu vào:

    Đầu ra:

    1	HPG	HELD_ONLY
    1	MBS	HELD_ONLY
    1	PVI	HELD_ONLY
    1	VCS	HELD_ONLY
    2	HPG	HELD_ONLY
    2	IDC	BOTH
    2	PVI	HELD_ONLY
    2	PVS	BOTH
    2	SHS	TRADED_ONLY
    3	CEO	BOTH
    3	NVB	HELD_ONLY
    3	SHS	HELD_ONLY
    3	VCB	HELD_ONLY
    4	CEO	HELD_ONLY
    4	FPT	HELD_ONLY
    4	IDC	HELD_ONLY
    5	VNM	HELD_ONLY
    6	PVS	HELD_ONLY
    6	VNM	HELD_ONLY

    Giải thích:

    Cả ba loại xuất hiện: BOTH (vd tài khoản 2 - IDC, PVS), TRADED_ONLY (2 - SHS), HELD_ONLY (đa số).

    Chủ đề

    📊 SQLSQLSQL: Buổi 8 – JOINTất cả môn học

    Đang tải editor...