2011-09-12 37 views

Trả lời

7

truy vấn này tạo ra một bảng chứa tất cả các cặp có thể có của id xúc.

Ví dụ, nếu id liên lạc của bạn là 1, 2, và 3 bạn sẽ nhận được kết quả là

1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 
3 3 
2

Đó là câu trả lời đơn giản: sử dụng truy vấn của bạn được liệt kê trong ví dụ. Nó sẽ hoạt động tốt. Mặc dù đây có lẽ là một ý tưởng tồi, nếu bạn muốn sử dụng cùng một bảng hai lần, lưu ý rằng bạn phải tham gia "những" bảng như họ khác nhau:

SELECT c1.id as sender, c2.id as replier 
FROM contacts c1, contacts c2 
WHERE sender.id = replier.id 
+1

Bạn không có bảng 'sender' hoặc' replier' cho mệnh đề WHERE để làm việc. Nó không phải là hoàn toàn rõ ràng những gì bạn có nghĩa là bởi 'nhận thức được rằng bạn phải tham gia "những" bảng như họ đã khác nhau' khi hai bảng là cùng một bảng. –

14

Bạn sử dụng một bảng duy nhất hai lần trong một truy vấn bằng cách cho nó hai cái tên, như thế.

Bí danh thường được giới thiệu với từ khóa AS. Bạn cũng thường chỉ định một điều kiện kết nối (nếu không có nó, bạn sẽ nhận được Cartesian Product của bảng được nối với chính nó). Đối với ưu tiên bạn sử dụng ký hiệu JOIN rõ ràng.

SELECT c1.id AS sender, c2.id AS replier 
    FROM contacts AS c1 
    JOIN contacts AS c2 ON c1.xxx = c2.yyy; 

Không rõ cột nào có thể được sử dụng để tham gia trong ví dụ này; chúng tôi không có bất kỳ thông tin nào để giúp giải quyết vấn đề đó.

Thông thường, có muốn được bảng khác để hoạt động như trung gian, chẳng hạn như một bảng tin nhắn:

SELECT c1.id AS sender, c1.email AS sender_email, 
     c2.id AS replier, c2.email AS replier_email, 
     m.date_time 
    FROM messages AS m 
    JOIN contacts AS c1 ON m.sender_id = c1.id 
    JOIN contacts AS c2 ON m.replier_id = c2.id; 
1

Có, bạn có thể sử dụng cùng một bảng hai lần bằng cách cho bí danh khác nhau để bàn. Tôi nghĩ rằng việc học về tự tham gia sẽ giúp bạn hiểu.

1

Có, bạn có thể sử dụng cùng một bảng nhiều lần trong cùng một truy vấn SELECT.

Lưu ý rằng bạn chỉ cần sử dụng tên tương quan bảng (thông tục 'bí danh') khi bảng xuất hiện nhiều lần trong cùng một phạm vi. Ví dụ, truy vấn SELECT sau sử dụng cùng một bảng hai lần nhưng, bởi vì mỗi nằm trong một phạm vi riêng biệt (mỗi lần cách nhau từ khóa UNION), không có tên tương quan bảng được yêu cầu:

SELECT id, 'Sender' AS contact_narrative 
    FROM contacts 
WHERE something = 1 
UNION 
SELECT id, 'Replier' AS contact_narrative 
    FROM contacts 
WHERE something = 2; 
Các vấn đề liên quan