2012-04-04 30 views
25

Tôi có một bảng có nhiều hàng với các lĩnh vực sau:Tuyên Bố SQL sử dụng mệnh đề WHERE với nhiều giá trị

PersonName SongName Status 

Tôi muốn sử dụng tên được lựa chọn từ một ListBox lựa chọn nhiều, mà tôi có thể lấy các giá trị, và sau đó thực hiện mệnh đề where để nó hiển thị tên bài hát mà mọi người được chọn đều có thể chơi, do đó trạng thái đã hoàn thành.

Ví dụ:

PersonName  SongName Status 
Holly   Highland Complete 
Holly   Mech  Complete 
Ryan   Highland Complete 

Nếu tôi chọn Holly và Ryan từ hộp danh sách và nhấn nút truy vấn chỉ nên hiển thị Tây Nguyên như đó là những gì cả hai đều biết.

+0

Nếu 'Ryan' không có 'Complete' như tình trạng này, nên kết quả được' Highland'? –

+0

SELECT [SongName] TỪ [Learning] WHERE ([BandieName] LIKE '%' + '"& item.Text &"' + '%') AND ([BandieName] LIKE '%' + '"& item.Text & "'+'% ') AND ([Trạng thái] LIKE' Hoàn thành ') – Sophie

Trả lời

48

Hãy thử điều này:

select songName from t 
where personName in ('Ryan', 'Holly') 
group by songName 
having count(distinct personName) = 2 

Số trong việc phải phù hợp với số lượng người. Nếu bạn cũng cần Status là Complete sử dụng này where khoản thay vì trước đó một:

where personName in ('Ryan', 'Holly') and status = 'Complete' 
+0

Điều này không mang lại kết quả nào, điều này tương tự như những gì tôi đã làm việc trước đây, nếu bạn sử dụng hoặc thích 'holly' AND 'RYAN 'sau đó nó không mang lại kết quả, nếu bạn sử dụng OR thay vì AND nó sẽ mang đến tất cả những bài hát có trạng thái hoàn chỉnh cho cả holly và ryan, không chỉ những thứ mà cả holly và ryan đều hoàn thành. cảm ơn – Sophie

+1

Điều đó là không thể, vì bạn có thể thấy nó cung cấp kết quả mong đợi [ở đây] (http://sqlfiddle.com/#!2/e1783/2) với cùng một dữ liệu bạn đã cung cấp. –

+0

để truy vấn này chạy và cung cấp cho bạn kết quả mong đợi, do đó nó chạy đúng? – Sophie

6
SELECT PersonName, songName, status 
FROM table 
WHERE name IN ('Holly', 'Ryan') 

Nếu bạn đang sử dụng parametrized Thủ tục lưu trữ:

  1. đèo ở dấu phẩy tách chuỗi
  2. Sử dụng chức năng đặc biệt để tách dấu phẩy tách chuỗi thành giá trị bảng biến
  3. Sử dụng INNER JOIN ON t.PersonName = newTable.PersonName sử dụng một biến bảng trong đó có chứa tên
+0

tên phải là bí danh của cột PersonName. –

+0

@aF. Bạn có thể thấy lý do tại sao bạn bị nhầm lẫn - dữ liệu mẫu hiển thị các tên cột khác nhau cho các định nghĩa đã đề cập trước đó! – Bridge

+0

@Bridge câu hỏi đã được chỉnh sửa oO –

0
Select t1.SongName 
From tablename t1 
left join tablename t2 
on t1.SongName = t2.SongName 
    and t1.PersonName <> t2.PersonName 
    and t1.Status = 'Complete' -- my assumption that this is necessary 
    and t2.Status = 'Complete' -- my assumption that this is necessary 
    and t1.PersonName IN ('Holly', 'Ryan') 
    and t2.PersonName IN ('Holly', 'Ryan') 
+0

Cả hai đều trong cùng một bảng? – Sophie

+0

@Sophie Vâng, đây là sự tự tham gia. –

+0

bảng của tôi được gọi là Học tập tương đương với t1 và t2 là gì? – Sophie

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