2017-06-08 45 views
1

我在MySQL数据库中的表让我们把它的产品:查找某些列之间MySQL表相同的字符串值

id_product   | id_lang   |   name 
    654    |   1   |   abc 
    654    |   2   |   xyz 
    654    |   3   |   abc 

    456    |   1   |   qwe 
    456    |   2   |   rty 
    456    |   3   |   zxc 

    123    |   1   |   bnm 
    123    |   2   |   bnm 
    123    |   3   |   jkl 

    789    |   1   |   ert 
    789    |   2   |   tyu 
    789    |   3   |   ert 

    333    |   1   |   ddd 
    333    |   2   |   o 
    333    |   3   |   bbb 

    222    |   1   |   xxx 
    222    |   2   |   zzz 
    222    |   3   |   o 

我想找到这id_lang 具有相同的所有id_product 1和。所以在这种情况下,结果应该是id_product:654和789.如果在这个查询中可以找到所有id_product,其中id_lang = 3和name =“o”,那么结果会很好。所以结果应该是,id_product:654,789和222.但是,如果它太复杂,我可以有两个查询,并在php中合并两个数组。

回答

2

您可以使用使用GROUP BYHAVINGUNION以下解决方案:

SELECT id_product 
FROM table_name 
WHERE id_lang IN (1, 3) 
GROUP BY id_product, name 
HAVING COUNT(name) > 1 
UNION 
SELECT id_product 
FROM table_name 
WHERE id_lang = 3 AND name = 'o' 

演示:http://sqlfiddle.com/#!9/88da30/4/0


说明
为了让您的第一项预期结果,你可以使用下面的查询:

-- result of this query: 654 and 789 
SELECT id_product 
FROM table_name 
WHERE id_lang IN (1, 3) 
GROUP BY id_product, name 
HAVING COUNT(name) > 1 

为了让您的第二个结果,你可以使用下面的查询:

-- result of this query: 222 
SELECT id_product 
FROM table_name 
WHERE id_lang = 3 AND name = 'o' 

要加入这两个结果,你必须合并通过使用UNION查询(请参阅上面的解决方案)。

+0

添加第二片谢谢你,它的伟大工程。 – Odin

2

包括@Sebastian 查询的第一部分,并用联盟

SELECT 
    id_product 
FROM 
    table_name 
WHERE 
    id_lang IN (1 , 3) 
GROUP BY id_product , name 
HAVING COUNT(name) > 1  
UNION 
SELECT 
    id_product 
FROM 
    table_name 
WHERE 
    id_lang = 3 AND name = 'o' 
相关问题