2013-02-13 21 views
6

Tôi đang tìm kiếm thẻ hoang dã bằng JDBC.Làm cách nào để tìm kiếm giá trị từ nhiều bảng bằng ký tự đại diện?

Mã hoạt động tốt khi tôi sử dụng một bảng duy nhất.

Khi tôi cố gắng kết hợp nhiều bảng bằng cách sử dụng tìm kiếm thẻ hoang dã, mã không hoạt động.

Ví dụ: người dùng có thể tìm kiếm bất kỳ từ khóa nào.

  1. nếu người dùng tìm kiếm "dế", từ khóa dế là availble trong bảng thể thao
  2. nếu người dùng tìm kiếm "windows 8", nó có sẵn trong bảng phần mềm
  3. nếu người dùng tìm kiếm "google, yahoo", các từ khóa có sẵn trong bảng website

Dưới đây là giá trị đầu vào động:

where s1(cricket,windows 8,google) 

Trong tìm kiếm bảng đơn, tôi tìm kiếm "cricket" trong bảng thể thao.

Đây là câu hỏi của tôi, mà hoạt động tốt:

"select * from sports WHERE feed LIKE '%" +s1 + "%'"; 

truy vấn bảng nhiều của tôi không hoạt động.

"select * from product WHERE sitename LIKE '%"+s1+"%'" "OR 

    "select * from sports  WHERE sitename LIKE '%"+s1+"%'" " OR 

    "select * from website WHERE sitename LIKE '%"+s1+"%'" " OR 

    "select * from software WHERE sitename LIKE '%"+s1+"%'" "OR 

    "select * from other WHERE sitename LIKE '%"+s1+"%'" 

Điều gì sai với mã này?

+0

Trong truy vấn duy nhất của bạn, bạn cho biết nguồn cấp dữ liệu giống như ở đâu và ở nhiều nơi như tên trang web? – Lyrion

Trả lời

2

Cố gắng kết hợp các câu lệnh đơn của bạn với UNION thay vì OR. Với điều này, bạn có thể concat một số SQL-Truy vấn và bảng với các cột tương tự. Ví dụ:

"select * from product WHERE sitename LIKE '%"+s1+"%' UNION 

select * from sports WHERE sitename LIKE '%"+s1+"%' UNION 

select * from website WHERE sitename LIKE '%"+s1+"%' UNION 

select * from software WHERE sitename LIKE '%"+s1+"%' UNION 

select * from other WHERE sitename LIKE '%"+s1+"%'" ; 

Nhưng lưu ý! Các bảng duy nhất của bạn phải có cùng cột/cột, nếu không nó sẽ không hoạt động!
dụ Có lẽ tốt hơn để làm rõ:

"select sitename, description from product WHERE sitename LIKE '%"+s1+"%' UNION 

select sitename, description from sports WHERE sitename LIKE '%"+s1+"%' UNION 

select sitename, description from website WHERE sitename LIKE '%"+s1+"%' UNION 

select sitename, description from software WHERE sitename LIKE '%"+s1+"%' UNION 

select sitename, text as description from other WHERE sitename LIKE '%"+s1+"%'" ; 

Như bạn có thể thấy trong Tuyên bố 6, bạn có thể tham khảo các cột khác để kết quả của bạn bằng cách đổi tên họ, nhưng columncount phải là giống nhau.

Hy vọng điều này có thể giúp bạn!