2013-06-09 7 views
1

привет, мне нужно получить plistid на основе данной комбинации avid. Например, я представил комбинацию из 1 и 4 avid, она должна вернуть plistid 1. Еще один пример: когда я представил комбинацию из 2 и 5 avid, он должен вернуть plistid из 5. И если я представил 1 и 3, он должен не возвращайте ничего, поскольку они имеют одинаковые attributeid.mysql - выберите столбец на основе комбинации значений из другого столбца

Как я могу генерировать его в MySQL вот мой стол
property

Примечание: заядлый может быть комбинацией 1,2,3 или 4 номера в зависимости от количества заядлый будет подана.

+3

Неясно, что ваша логика запроса. Вместо всех * примеров *, укажите правило * – Matanya

+0

Я думаю, что он хочет «plistid», когда он одинаковый для обоих входов, правильно? – sarwar026

+0

Мне нужно получить plistid на основе данной комбинации avid – Kiel

ответ

1

Сначала найдите все совпадения от avid от plistid, а затем проверьте, что у них разные attributeid. Вы можете сделать это с агрегацией, как изменение запроса набора-внутри-множеств:

select plistid 
from t 
group by plistid 
having sum(avid = 1) > 0 and 
     sum(avid = 4) > 0 and 
     count(distinct case when avid in (1, 4) then attributeid end) = 2 

Первые два условия в предложении having говорят, что avid s вы хотите. Они подсчитывают количество раз, которое появляется avid с одним из значений, каждое возвращает true только тогда, когда найдено хотя бы одно значение. Последнее говорит, что вам нужны разные идентификаторы атрибутов в строках.

0

Try:

select plistid 
from t 
where avid in (1,4) 
group by plistid 
having count(distinct avid) =2 
0

Что об этом?

SELECT t1.plistid 
FROM t t1 
JOIN t t2 
    ON t1.attributeid != t2.attributteid 
    AND t1.plistid = t2.plistid 
WHERE 
    t1.avid = 1 
    AND t2.avid = 4 
0

попробовать это: -

select a.plistid 
from your_table a, your_table b 
where a.plistid = b.plistid 
and a.avid = <first param> 
and b.avid = <second param> 
and a.attributeid <> b.attributeid; 
Смежные вопросы