可能重复:
Intersect in 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
这两行都可以包含Product-1中的A,B或product-2
与A相同,c共同元素是B.如何为此编写查询...在sql中我们可以使用相交操作 但MySQL我不知道。请帮助我......
答案 0 :(得分:2)
我会建议,而不是使用双向关系的列,这会使查询复杂化,保持关系的一种方式。
因此,而不是以下含义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
我所做的是创建一个派生表,其中包含相反关系的副本,以便我将关系视为一种方式,然后正常进行。