我在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 1 和 3 中具有相同名称的id_product。因此,在这种情况下的结果应该是id_product:654和789.如果在此查询中也可以找到id_lang = 3和name =“o”的所有id_product,那将是很好的。所以结果应该是,id_product:654,789和222.但是如果它太复杂了我可以有两个查询并在php中合并两个数组。
答案 0 :(得分:2)
您可以使用GROUP BY
,HAVING
和UNION
使用以下解决方案:
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'
<强>解释强>
要获得第一个预期结果,您可以使用以下查询:
-- 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
合并查询(请参阅上面的解决方案)。
答案 1 :(得分: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'