如何编写查询以检索公共数据

时间:2012-02-21 14:31:37

标签: mysql intersect

  

可能重复:
  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我不知道。请帮助我......

1 个答案:

答案 0 :(得分:2)

我会建议,而不是使用双向关系的列,这会使查询复杂化,保持关系的一种方式。

因此,而不是以下含义A to CC to A

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

您实际上这意味着A to CC 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

我所做的是创建一个派生表,其中包含相反关系的副本,以便我将关系视为一种方式,然后正常进行。