thể trùng lặp:
sql: self-joins explainedSELF JOIN là gì và khi nào bạn sẽ sử dụng nó?
được tự tham gia gì và khi nào bạn sẽ sử dụng nó? Tôi không hiểu tự tham gia như vậy một lời giải thích giáo dân với một ví dụ sẽ là tuyệt vời.
thể trùng lặp:
sql: self-joins explainedSELF JOIN là gì và khi nào bạn sẽ sử dụng nó?
được tự tham gia gì và khi nào bạn sẽ sử dụng nó? Tôi không hiểu tự tham gia như vậy một lời giải thích giáo dân với một ví dụ sẽ là tuyệt vời.
Bạn sử dụng tự tham gia khi bảng tham chiếu dữ liệu trong chính nó.
Ví dụ: bảng Employee
có thể có cột SupervisorID
trỏ đến nhân viên là sếp của nhân viên hiện tại.
Để truy vấn dữ liệu và thu thập thông tin cho cả hai người trong một dòng, bạn tự có thể tham gia như thế này:
select e1.EmployeeID,
e1.FirstName,
e1.LastName,
e1.SupervisorID,
e2.FirstName as SupervisorFirstName,
e2.LastName as SupervisorLastName
from Employee e1
left outer join Employee e2 on e1.SupervisorID = e2.EmployeeID
Một tự tham gia chỉ đơn giản là khi bạn tham gia một bảng với chính nó. Không có từ khóa SELF JOIN
, bạn chỉ cần viết một kết nối thông thường trong đó cả hai bảng tham gia vào liên kết là cùng một bảng. Một điều cần lưu ý là khi bạn đang tự tham gia nó là cần thiết để sử dụng một bí danh cho bảng nếu không tên bảng sẽ không rõ ràng.
Điều này rất hữu ích khi bạn muốn tương quan các cặp hàng từ cùng một bảng, ví dụ như mối quan hệ cha - con. Truy vấn sau trả về tên của tất cả các danh mục con ngay lập tức của danh mục 'Nhà bếp'.
SELECT T2.name
FROM category T1
JOIN category T2
ON T2.parent = T1.id
WHERE T1.name = 'Kitchen'
Rất vui được xem nhận xét này .. TRÊN T2.parent = T1.id (vì nó ảnh hưởng đến kết quả nếu chúng ta trao đổi 'cha mẹ' và 'id' trong nó) – himanshupareek66
Tốt đề cập đến không có từ khóa 'SELF JOIN'. Tôi đã nhầm lẫn về phần đó! – nclsvh
Bạn muốn sử dụng tự tham gia trên bảng "tự giới thiệu" - ví dụ: một bảng các nhân viên trong đó managerid là một khóa ngoại để nhân viên trên cùng một bảng đó.
Ví dụ:
SELECT E.name, ME.name AS manager
FROM dbo.Employees E
LEFT JOIN dbo.Employees ME
ON ME.employeeid = E.managerid
ON ME.employeeid = E.managerid sẽ tạo kết quả khác thay vì ON ME.managerid = E.employeeid – himanshupareek66
SQL tự tham gia chỉ đơn giản là một bình thường tham gia được sử dụng để tham gia vào một bảng với chính nó.
Ví dụ:
Select *
FROM Table t1, Table t2
WHERE t1.Id = t2.ID
Sẽ không an toàn hơn khi sử dụng 'SELECT t1. *' Để tránh trùng lặp các tên cột trong kết quả? – Matthieu
Vâng, một ví dụ điển hình là nơi bạn muốn để có được một danh sách các nhân viên và cán bộ quản lý trực tiếp của mình:
select e.employee as employee, b.employee as boss
from emptable e, emptable b
where e.manager_id = b.empolyee_id
order by 1
Đó là cơ bản sử dụng khi có bất kỳ mối quan hệ giữa các hàng được lưu trữ trong cùng một bảng.
Và cứ thế ...
Boo cho cú pháp không phải ANSI và sử dụng thứ tự trong mệnh đề 'ORDER BY' thay vì tên cột. – RedFilter
Boo quay lại ngay với bạn vì thiếu điểm của câu trả lời :-) Tôi có xu hướng sử dụng cú pháp đơn giản nhất hoạt động vì DBMS tốt 'sẽ không để điều đó ảnh hưởng đến hiệu suất. – paxdiablo
câu trả lời hay nhất cho đến nay ... :) –
Điều đó có vẻ như tự bên ngoài tham gia với tôi? –
@JoeCaruso Đó là vì nó là;) – RedFilter
Tôi tự hỏi tại sao không ai nhấn mạnh phần "trong cùng một hàng". Đó không phải là toàn bộ quan điểm của việc tự tham gia? –