MySQL多对多关系-将O​​R或SELECT更改为AND

时间:2019-04-16 11:43:07

标签: mysql sql

我有以下代码

SELECT DISTINCT t.`id_task` FROM crm_task t LEFT JOIN crm_task_tagtogroup asso USING (`id_task`) WHERE asso.id_tag IN(1,2,5,6)

我的问题是,它在OR而不是AND的基础上 includes (Excldude可以正常工作)。寻找将id_task IN ()更改为AND的有效方法。
所以我收到所有分配了1,2,5和6标签的条目

数据库结构:



CREATE TABLE `crm_task_tagtogroup` (
`id_task`  INT UNSIGNED  , 
`id_tag`  INT UNSIGNED  , 
 UNIQUE KEY (`id_task`, `id_tag`)
) CHARACTER SET utf8 COLLATE utf8_general_ci ;

CREATE TABLE `crm_task` (
`id_task`  INT UNSIGNED   AUTO_INCREMENT PRIMARY KEY , 
`name`  VARCHAR(30), 
`description`  TEXT , 
`priority`  INT UNSIGNED  , 
`client_id`  INT UNSIGNED  , 
`value_netto`  INT UNSIGNED
) CHARACTER SET utf8 COLLATE utf8_general_ci ;


有什么想法吗?希望保持简单,并且不包含PHP脚本中的foreach检查

1 个答案:

答案 0 :(得分:1)

我认为您要获取的代码与此相似:

SELECT DISTINCT t.`id_task` FROM crm_task t INNER JOIN crm_task_tagtogroup tag ON (id_tag in (1,2,3)) having count(distinct id_tag) = 3;

将参数列表放在on子句中,并将这些参数的计数放在having count语句的末尾。

这将意味着仅返回与参数数量匹配的结果。

我希望这会有所帮助!