MySQL ПРИСОЕДИНЯЙТЕСЬ КУДА, где подделывают Ключ = id1 И подделывают Ключ = id2 - PullRequest
1 голос
/ 26 января 2012

У меня небольшая проблема с этой проблемой, и мне трудно найти решение, потому что я не могу правильно сформулировать вопрос, чтобы вызвать соответствующую информацию.

Я пытаюсьполучить запись "fProduct" из таблицы ниже, где она имеет "fAttribute" от 2 до 20.

id  fAttribute  fProduct
19      2        2967
48      2        2923
50      2        3008
51      20       3008
52      2        2295
53      20       2295

Моя нижеприведенная оценка дает 0 результатов, когда я ожидаю вернуть 2295 и 3008. fProduct.*

SELECT fProduct 
FROM  tableName 
WHERE fAttribute = 2 AND fAttribute = 20
GROUP BY fProduct

Может кто-нибудь помочь, пожалуйста?

Ответы [ 3 ]

3 голосов
/ 26 января 2012

Вы можете использовать INNER JOINS или использовать условия EXISTS:

ВНУТРЕННЕЕ СОЕДИНЕНИЕ:

SELECT DISTINCT a.fProduct
FROM MyTable a
     INNER JOIN MyTable b ON a.fProduct = b.fProduct AND b.fAttribute = 2
     INNER JOIN MyTable c ON a.fProduct = c.fProduct AND c.fAttribute = 20

EXISTS:

SELECT afproduct
FROM MyTable a
WHERE EXISTS (SELECT b.id FROM MyTable b WHERE a.fProduct = b.fProduct AND b.fAttribute = 2)
  AND EXISTS (SELECT c.id FROM MyTable c WHERE a.fProduct = c.fProduct AND c.fAttribute = 20)
1 голос
/ 26 января 2012

Объединение должно помочь:

SELECT distinct a.fProduct 
FROM  tableName as a
join tableName as b on b.product = a.product
WHERE a.fAttribute = 2 and  b.fAttribute = 20
0 голосов
/ 26 января 2012

Поскольку вы уже выполняете GROUP BY, просто измените ваше предложение WHERE на OR или IN и добавьте HAVING COUNT(fattribute) = 2, что гарантирует, что оно имеет оба.

SELECT fproduct 
FROM   tablename 
WHERE  fattribute IN (2 , 20)
GROUP  BY fproduct 
HAVING COUNT(fattribute) = 2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...