2017-06-08 69 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' 
相關問題