2009-10-30 42 views
10

postgres có một kiểu dữ liệu mảng, trong trường hợp này một mảng số:postgres - so sánh hai mảng

CREATE TABLE sal_emp (name text, pay_by_quarter integer[]); 
INSERT INTO sal_emp VALUES ('one', '{1,2,3}'); 
INSERT INTO sal_emp VALUES ('two', '{4,5,6}'); 
INSERT INTO sal_emp VALUES ('three', '{2,4,6}'); 
SELECT * FROM sal_emp; 

Result: 
one, {1,2,3} 
two, {4,5,6} 
three, {2,4,6} 

Từ những gì tôi có thể nói, bạn chỉ có thể truy vấn một mảng như sau:

SELECT * FROM sal_emp WHERE 4=ANY(pay_by_quarter); 
SELECT * FROM sal_emp WHERE ARRAY[4,5,6]=pay_by_quarter; 

có nghĩa là bạn có thể chọn một hàng có mảng chứa một đối sánh cho một đối số đơn lẻ hoặc nếu toàn bộ mảng khớp với một đối số mảng.

Tôi cần phải chọn một hàng mà bất kỳ thành viên nào trong mảng của hàng khớp với bất kỳ thành viên nào của mảng đối số - loại giống như 'IN' nhưng tôi không thể tìm ra cách. Tôi đã thử hai phương pháp sau đây nhưng không làm việc:

SELECT * from sal_emp WHERE ARRAY[4,5,6]=ANY(pay_by_quarter); 
SELECT * from sal_emp WHERE ANY(pay_by_quarter) IN (4,5,6); 

tôi giả sử tôi có thể làm điều gì đó với chuyển đổi mảng thành một chuỗi nhưng điều đó có vẻ như giải pháp nghèo ..

bất kỳ ý tưởng?

Trả lời