2011-08-24 44 views
30

Tôi có hai bảng (Bảng A và Bảng B) mà tôi muốn tham gia trên nhiều cột trong cả hai bảng.tham gia vào nhiều cột

Table A       
Col1  Col2     
================    
A11  A21     
A22  A22    
A33  A23     

Table B 
Col1  Col2 Val 
================= 
B11  B21  1 
B12  B22  2 
B13  B23  3 

Tôi muốn cả hai Cột trong Bảng A tham gia vào một trong hai cột Col1 và Col2 trong Bảng B để lấy Val.

+4

Dữ liệu mẫu bạn đã đăng sẽ không trả về kết quả nào. Các giá trị 'A' có thực sự là tiền tố' A' và 'B' là' B' không? Ngoài ra đây là một yêu cầu rất có mùi nếu các cột được hoán đổi cho nhau theo cách này nó cho thấy thiết kế không được chuẩn hóa. –

+0

Cách tôi đưa dữ liệu của tôi có vẻ như không có kết quả. Vui lòng bỏ qua cách dữ liệu được xây dựng trong bảng. – ElegantFellow

Trả lời

39

Đồng ý không các trận đấu trong ví dụ của bạn.
Nếu bạn muốn nói đến cả hai cột, thì cần một truy vấn như thế này hoặc cần phải kiểm tra lại thiết kế dữ liệu.

Select TableA.Col1, TableA.Col2, TableB.Val 
    FROM TableA 
    INNER JOIN TableB 
      ON TableA.Col1 = TableB.Col1 OR TableA.Col2 = TableB.Col2 
      OR TableA.Col2 = TableB.Col1 OR TableA.Col1 = TableB.Col2 
+0

Tôi đồng ý rằng sẽ không phù hợp với cách dữ liệu của tôi được xây dựng. Tôi tạo ra dữ liệu trên bay cho một minh họa. Vui lòng bỏ qua dữ liệu.
Về cơ bản, tôi đang cố gắng đạt được nhiều mối quan hệ mà không cần một bảng lập bản đồ. – ElegantFellow

1

Dưới đây là cấu trúc của SQL mà bạn có thể viết. Bạn có thể thực hiện nhiều phép nối bằng cách sử dụng "AND" hoặc "OR".

Select TableA.Col1, TableA.Col2, TableB.Val 
FROM TableA, 
INNER JOIN TableB 
ON TableA.Col1 = TableB.Col1 OR TableA.Col2 = TableB.Col2 
0
tableB.col1 = tableA.col1 
OR tableB.col2 = tableA.col1 
OR tableB.col1 = tableA.col2 
OR tableB.col1 = tableA.col2 
14

Các truy vấn khác đều dựa trên bất kỳ MỘT điều kiện nào đủ điều kiện và nó sẽ trả về bản ghi ... nếu bạn muốn đảm bảo BOTH cột của bảng A được khớp, bạn sẽ phải làm điều gì đó như ...

select 
     tA.Col1, 
     tA.Col2, 
     tB.Val 
    from 
     TableA tA 
     join TableB tB 
      on (tA.Col1 = tB.Col1 OR tA.Col1 = tB.Col2) 
      AND (tA.Col2 = tB.Col1 OR tA.Col2 = tB.Col2) 
Các vấn đề liên quan