Положив ответ Томаша Зато, я согласен с тем, что простое повторение массивов является самым быстрым. Кроме того (как уже отмечали другие), функцию следует называть равной / равной, а не сравнивать. В свете этого я модифицировал функцию, чтобы обрабатывать массивы для сходства - т. Е. Они имеют одни и те же элементы, но не в порядке - для личного использования, и я думал, что я брошу его здесь для всеобщего обозрения.
Array.prototype.equals = function (array, strict) {
if (!array)
return false;
if (arguments.length == 1)
strict = true;
if (this.length != array.length)
return false;
for (var i = 0; i < this.length; i++) {
if (this[i] instanceof Array && array[i] instanceof Array) {
if (!this[i].equals(array[i], strict))
return false;
}
else if (strict && this[i] != array[i]) {
return false;
}
else if (!strict) {
return this.sort().equals(array.sort(), true);
}
}
return true;
}
Эта функция принимает дополнительный параметр strict, который по умолчанию имеет значение true. Этот строгий параметр определяет, должны ли массивы быть полностью равными как по содержимому, так и по порядку этого содержимого или просто содержать одно и то же содержимое.
Пример:
var arr1 = [1, 2, 3, 4];
var arr2 = [2, 1, 4, 3]; // Loosely equal to 1
var arr3 = [2, 2, 3, 4]; // Not equal to 1
var arr4 = [1, 2, 3, 4]; // Strictly equal to 1
arr1.equals(arr2); // false
arr1.equals(arr2, false); // true
arr1.equals(arr3); // false
arr1.equals(arr3, false); // false
arr1.equals(arr4); // true
arr1.equals(arr4, false); // true
I 've также написал быстрый jsfiddle с функцией и этим примером: http://jsfiddle.net/Roundaround/DLkxX/
Этого можно достичь с помощью двух коррелированных подзапросов, используемых в качестве EXISTS
условий фильтрации.
SELECT t.id, t.color, t.size
FROM mytable t
WHERE
t.size IN ('2XL', '3XL')
AND EXISTS (SELECT 1 FROM mytable WHERE id = t.id AND color = t.color AND size = '2XL')
AND EXISTS (SELECT 1 FROM mytable WHERE id = t.id AND color = t.color AND size = '3XL')
Другое решение заключается в использовании самосоединения:
SELECT t.id, t.color, t.size
FROM mytable t
INNER JOIN mytable t2
ON t2.id = t.id
AND t2.color = t.color
AND (
( t.size = '2XL' AND t2.size = '3XL' )
OR ( t.size = '3XL' AND t2.size = '2XL' )
)
Вы можете использовать существует следующим образом:
select t.* from tablename t where
exists (
select 1 from tablename where
id = t.id and color = t.color and
size in ('2XL', '3XL') and t.size in ('2XL', '3XL') and
size <> t.size
)
order by t.id, t.color, t.size