как написать запрос для получения общих данных

Возможный дубликат:
пересечение в mysql

У меня есть проект php для получения общих данных. Я немного слаб в написании запроса MySQL. Меня пробовали по-разному. Но я не могу получить правильный результат

Мой стол

 Id  Product-1   product-2
 -------------------------
 1      A           B
 2      B           C
 3      C           A
 4      E           B
 5      H           C

Это моя таблица. Я хочу написать запрос MySQL для извлечения общих элементов. например: Здесь A, B будет доходить до Product-1, Product-2, я хочу получить общий элемент элемента A, B Здесь выход C

    3      C           A
    2      B           C

обе строки могут содержать либо A, B в Product-1 или product-2

То же, что и общий элемент A,c - B. Как написать запрос для этого... в sql мы можем использовать операцию пересечения, но в MySQL я понятия не имею. Пожалуйста, помогите мне...


person Vineeth    schedule 21.02.2012    source источник
comment
Возможные дубликаты: stackoverflow.com/questions/2621382/intersect-in-mysql, stackoverflow.com/questions/2300322/intersect-in-mysql   -  person Dan    schedule 21.02.2012
comment
Пожалуйста, не могли бы вы попытаться уточнить свой запрос, лично я, по крайней мере, не вижу, о чем вы просите, поэтому не могу помочь   -  person Simon at My School Portal    schedule 21.02.2012


Ответы (1)


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

Итак, вместо следующего значения A to C и C to A:

Id  Product-1   Product-2
 -------------------------
 3      C           A

На самом деле вы делаете это, чтобы иметь в виду A to C и C to A:

Id  Product-1   Product-2
 -------------------------
 2      A           C
 3      C           A

Затем, при условии отсутствия дубликатов, ваш запрос будет таким:

SELECT Product-1
FROM tablename
WHERE Product-2 IN ('A', 'B')
GROUP BY Product-1
HAVING COUNT(*) = 2

Однако с вашими данными следующий запрос даст общие элементы для 'A', 'B':

SELECT Product-1 FROM
((SELECT Product-1, Product-2
 FROM tablename)
UNION
(SELECT Product-2, Product-1
 FROM tablename)) t
WHERE Product-2 IN ('A', 'B')
GROUP BY Product-1
HAVING COUNT(*) = 2

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

person Marcus Adams    schedule 21.02.2012