mysql左连接子选择

mysql左连接子选择,mysql,database,select,Mysql,Database,Select,我有以下格式的表格: tag | item ---------- 1 | 1 2 | 2 2 | 3 3 | 1 3 | 2 3 | 3 我必须选择那些标签,它们出现在每个标签的一组项目中 例如: items={2,3}->tags{2,3},item 2有tag 2,3,item 3有tag 2,3,常用tag是2,3 items={1,2,3}->tags{},item 1有tag 1,3,item 2有tag 2,3,item 3有tag 2,3,常用tag是3

我有以下格式的表格:

tag | item
----------
1   | 1
2   | 2
2   | 3
3   | 1
3   | 2
3   | 3
我必须选择那些标签,它们出现在每个标签的一组项目中

例如:

items={2,3}->tags{2,3},item 2有tag 2,3,item 3有tag 2,3,常用tag是2,3

items={1,2,3}->tags{},item 1有tag 1,3,item 2有tag 2,3,item 3有tag 2,3,常用tag是3

items={1,3}->tags{3},item 1有tag 1,3,item 3有tag 2,3,常用tag是3

作为输入,我有一组项目。我不知道如何写这样的查询


感谢您的回复。

解决您问题的查询假设标签和项目没有重复条目

SELECT tag FROM <table_name>
WHERE item IN (<items to be searched seperated by ,>)
GROUP BY tag
HAVING COUNT(*) = <number of items>;
e、 g.项目{1,3}

SELECT tag FROM <table_name>
WHERE item IN (1,3)
GROUP BY tag
HAVING COUNT(*) = 2;
对于项目{1,2,3}

SELECT tag FROM <table_name>
WHERE item IN (1,2,3)
GROUP BY tag
HAVING COUNT(*) = 3;
要查看以逗号分隔的结果,请使用以下查询

SELECT GROUP_CONCAT(a.tag) FROM (
SELECT tag FROM <table_name>
WHERE item IN (<items to be searched seperated by comma>)
GROUP BY tag
HAVING COUNT(*) = <no. of items>) AS a;

希望对您有所帮助……

解决您问题的查询假设标记和项目没有重复条目

SELECT tag FROM <table_name>
WHERE item IN (<items to be searched seperated by ,>)
GROUP BY tag
HAVING COUNT(*) = <number of items>;
e、 g.项目{1,3}

SELECT tag FROM <table_name>
WHERE item IN (1,3)
GROUP BY tag
HAVING COUNT(*) = 2;
对于项目{1,2,3}

SELECT tag FROM <table_name>
WHERE item IN (1,2,3)
GROUP BY tag
HAVING COUNT(*) = 3;
要查看以逗号分隔的结果,请使用以下查询

SELECT GROUP_CONCAT(a.tag) FROM (
SELECT tag FROM <table_name>
WHERE item IN (<items to be searched seperated by comma>)
GROUP BY tag
HAVING COUNT(*) = <no. of items>) AS a;

希望它能帮上忙…

我想您正在寻找共享相同标签的项目列表,对吗

这个查询应该可以为您完成。它由一个内部摘要查询组成,该查询将每个项目的标记分组在一起,然后是一个外部摘要查询,该查询将共享标记组的项目分组在一起

SELECT GROUP_CONCAT(item ORDER by ITEM) items, tags
  FROM (
           SELECT GROUP_CONCAT(tag ORDER BY tag) tags, item
             FROM tbl
         GROUP BY item
        )t
  GROUP BY tags
  ORDER BY tags 
对于问题中的测试数据集,它返回:

| ITEMS | TAGS |
----------------
|     1 |  1,3 |
|   2,3 |  2,3 |
也就是说,项目1具有标记1和3。您的项目2和3有标签2和3


去拉小提琴

我认为您正在寻找共享相同标签的项目列表,对吗

这个查询应该可以为您完成。它由一个内部摘要查询组成,该查询将每个项目的标记分组在一起,然后是一个外部摘要查询,该查询将共享标记组的项目分组在一起

SELECT GROUP_CONCAT(item ORDER by ITEM) items, tags
  FROM (
           SELECT GROUP_CONCAT(tag ORDER BY tag) tags, item
             FROM tbl
         GROUP BY item
        )t
  GROUP BY tags
  ORDER BY tags 
对于问题中的测试数据集,它返回:

| ITEMS | TAGS |
----------------
|     1 |  1,3 |
|   2,3 |  2,3 |
也就是说,项目1具有标记1和3。您的项目2和3有标签2和3


去拉小提琴

所以你给出了一个项目列表,你想要这个列表的通用标签?或者只是一个项目列表和普通标签?我有一个项目列表,想要一个普通标签,所以你给了一个项目列表,你想要该列表的普通标签?或者只是一个项目列表和普通标签?我有一个项目列表,想要一个普通标签我有一个项目列表,我想知道,哪些项目共享相同的标签,我不是在寻找所有的可能性。我有一个项目列表,我想知道,哪些项目共享相同的标签,我不是在寻找所有的可能性。