Один запрос для выбора записи из таблицы A, которая имеет обе опции в таблице отношений B - PullRequest
1 голос
/ 05 мая 2011

Мне кажется, что я думаю об этих двух трудностях, и решение должно быть проще, может быть, это только один из тех дней.

но у меня есть 3 таблицы

продукт

productId    name    
-----------------
1            the
2            name
3            does't
4            matter

опция

optionId    name    
-----------------
1            the
2            name
3            does't
4            matter

product_option

id   productId  optionId  
-------------------------
1    1          1
1    1          3
1    2          4
1    2          1
1    3          1

Я хочу проверить, имеет ли productId 1 optionId 1 и optionId 3 (в данном случае true), это выполнимо в одном запросе?

Ответы [ 3 ]

2 голосов
/ 05 мая 2011
SELECT p.productId
    FROM product p
        INNER JOIN product_option po
            ON p.productId = po.productId
                AND po.optionId IN (1,3)
    GROUP BY p.productId
    HAVING COUNT(DISTINCT po.optionId) = 2
2 голосов
/ 05 мая 2011
SELECT P.productId, P.name 
  FROM product AS P 
 WHERE 2 = (SELECT COUNT(*) 
              FROM product_option AS PO 
             INNER 
              JOIN option AS O 
                ON PO.optionId = O.optionId 
               AND PO.productId = P.productId 
               AND O.name IN ('value1', 'value2'));
1 голос
/ 05 мая 2011

первый румянец, попробуйте что-то вроде

Select po1.Id
from Product_Option po1
inner join Product_Option po2 
  on po1.productId = po2.productId 
  and po1.optionId != po2.productId
where po1.optionId = 1
and po2.optionId = 3

Это может быть не совсем то, что вам нужно, но это то, с чего я бы начал.Особенно, если это специальный (или редко используемый) запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...