Tôi đang cố gắng viết một truy vấn bằng từ khóa IN.
Bảng A nhận dạng thuộc tính, tên thuộc tính
Khóa bảng B, nhận dạng thuộc tính, giá trị thuộc tính
Dựa trên khóa được cung cấp, tôi muốn trả về tất cả các kết hợp attrName, attrVal. Kết quả sẽ chứa các cột từ cả hai bảng. Tôi không muốn sử dụng phép nối attrId vì tôi đang cố gắng thực hành cách sử dụng từ khóa IN.
Dưới đây là các truy vấn tôi đã thử:
Chọn a.attrName, b2.attrVal
từ bảng_A AS a, bảng_B AS b2
trong đó a.attrId in (Chọn b1.attrId từ Table_B b1 trong đó key = )
Nhưng tôi không nhận được bất kỳ kết quả truy vấn nào. Các truy vấn sử dụng từ khóa IN cũng chậm và nên tránh. Tôi có khoảng 500 mục trong bảng_A và 500k mục trong bảng_B. Một tùy chọn khác đối với tôi là lấy tất cả attrIds từ bảng_B và sau đó với mỗi attrId được truy xuất sẽ kích hoạt nhiều truy vấn jdbc để nhận attrName tương ứng. bạn có thể giúp được không? Cảm ơn
Truy vấn của bạn đang thực hiện thao tác CROSS JOIN từ Một
Mỗi hàng được trả về giống như từ b
Trả về mỗi hàng "khớp".
Truy vấn của bạn tương đương với:
CHỌN a.attrName
, b2.attrVal
TỪ bảng_A một
ĐI QUA
THAM GIA bảng_B b2
Ở ĐÂU a.attrId IN ( )
Cách duy nhất truy vấn này không trả về bất kỳ hàng nào là 1) Một
không có dòng nào được thỏa mãn WHERE
vị ngữ trong mệnh đề, 2) b2 không chứa bất kỳ hàng nào, hoặc 3) việc thực thi truy vấn đã tạo ra nhiều hàng đến mức vượt quá một số tài nguyên có sẵn (chẳng hạn như không gian tạm thời) và trả về lỗi hoặc 4) máy khách Truy vấn hết thời gian hoặc bị hủy trước khi hoàn thành.
Tôi biết bạn đang cố gắng viết một chương trình bằng cách sử dụng IN
toán tử, nhưng truy vấn bạn đã đăng trả về một bộ sưu tập thực sự không có nhiều ý nghĩa.
hỏi:Đó là một truy vấn sử dụng từ khóa IN, tốc độ chậm và nên tránh.
trả lời: IN
Bản thân toán tử không nhất thiết làm cho truy vấn chậm hơn.
Ví dụ:
CHỌN t.id TỪ mytable t WHERE t.id = 2 HOẶC t.id = 3 HOẶC t.id = 5
可以使用 IN
Toán tử được viết lại thành:
CHỌN t.id TỪ mytable t WHERE t.id IN (2,3,5)
Mặt khác, nếu 1) truy vấn con chậm và/hoặc 2) có nhiều hàng bắt buộc thì truy vấn con phải được đánh giá.
Nếu bạn muốn bắt đầu từ b
Trả về các hàng đáp ứng các tiêu chí nhất định và sau đó kết hợp chúng với Một
Bạn nên tránh các dòng phù hợp trong THAM GIA CHÉO
hoạt động, bằng cách cung cấp một số điều kiện để khớp (ON
vị ngữ nối trong mệnh đề)
Ví dụ:
CHỌN a.attrName
, b.attrVal
TỪ bảng_A một
THAM GIA bảng_B b
TRÊN a.attrId = b.attrId
Ở ĐÂU b.key = ''
Tôi là một lập trình viên xuất sắc, rất giỏi!