2010-04-05 54 views
13

Tôi có hai bảng: table1, table2. Bảng 1 có 10 cột, bảng 2 có 2 cột.Chọn các cột thích hợp từ câu lệnh JOIN

SELECT * FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID 

Tôi muốn chọn tất cả các cột từ bảng 1 và chỉ 1 cột từ bảng 2. Có thể làm điều đó mà không liệt kê tất cả các cột từ table1?

Trả lời

14

Vâng, bạn có thể làm sau:

SELECT t1.*, t2.my_col FROM table1 AS T1 INNER JOIN table2 AS T2 ON T1.ID = T2.ID 
+0

Cảm ơn bạn đã trả lời! –

-1

Sử dụng table1.* ở vị trí của tất cả các cột của table1;)

4

Mặc dù bạn có thể làm điều t1.*, t2.col1, tôi sẽ không khuyên bạn nên nó trong sản xuất mã.

Tôi sẽ không bao giờ sử dụng SELECT * trong sản xuất - tại sao?

  • bạn đang yêu cầu SQL Server nhận tất cả các cột - bạn có thực sự, thực sự cần tất cả chúng?
  • bằng cách không chỉ định tên cột, SQL Server phải tự tìm ra - nó phải tham khảo từ điển dữ liệu để tìm ra cột nào có giá trị một chút hiệu suất
  • quan trọng nhất: bạn không Không biết những gì bạn đang nhận được trở lại. Đột nhiên, bảng thay đổi, một hoặc hai cột khác được thêm vào. Nếu bạn có bất kỳ mã nào dựa trên ví dụ: trình tự hoặc số cột trong bảng mà không kiểm tra một cách rõ ràng cho điều đó, mã của bạn có thể phanh

Tôi đề nghị cho mã sản xuất: luôn xác định chính xác những cột mà bạn thực sự cần - và thậm chí (không có ngoại lệ!) nếu bạn cần tất cả chúng, hãy đánh vần nó một cách rõ ràng. Ít bất ngờ, ít lỗi để săn lùng, nếu có bất cứ điều gì thay đổi trong bảng bên dưới.

+1

Hmm, OK, tôi có một bảng ** table1 **. Nó chứa 10 cột. Câu lệnh SELECT nào sẽ nhanh hơn? 1. CHỌN * TỪ TABLE1 2. CHỌN COL1, COL2/* ĐẾN TEN */FROM TABLE1 Và điều này sẽ dễ hiểu hơn? –

+1

Người ta nói rõ ràng tất cả 10 cột sẽ nhanh hơn và dễ hiểu hơn. –

+1

tại sao danh sách các cột rõ ràng sẽ nhanh hơn? – amwinter

Các vấn đề liên quan