Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
不像MySQL语句_Mysql_Select_Sql Like - Fatal编程技术网

不像MySQL语句

不像MySQL语句,mysql,select,sql-like,Mysql,Select,Sql Like,我不喜欢这种说法。我有两个sql表设置为标记映射。第一个表根据搜索名称查找标记id,第二个表根据找到的标记id查找资源id。当我运行下面的NOT LIKE语句时,我收到结果:resource_id=1 标记映射表 查询 我需要这个查询做的就是,如果它找到一个标记名为“meat”的资源id,我不希望它返回这个资源id 如果我的解释不清楚,请告诉我。然后您必须搜索: select resource_id from tagmap where resource_id not in (select res

我不喜欢这种说法。我有两个sql表设置为标记映射。第一个表根据搜索名称查找标记id,第二个表根据找到的标记id查找资源id。当我运行下面的NOT LIKE语句时,我收到结果:resource_id=1

标记映射表 查询 我需要这个查询做的就是,如果它找到一个标记名为“meat”的资源id,我不希望它返回这个资源id


如果我的解释不清楚,请告诉我。

然后您必须搜索:

select resource_id
from tagmap
where resource_id not in (select resource_id
                          from tagmap
                          where tag_id in (select tag_id from tag
                                           where name like '%meat%'));
或使用
连接

select *
from tagmap
where resource_id not in (select m.resource_id
                          from tagmap m, tag t
                          where m.tag_id = t.tag_id and t.name like '%meat%');
您可以查找名为“meat”的
resource\u id
,并将这些
不包含在您的选择中

这可能与您的查询相对应,但我不确定:

select f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
from tag as t, tagmap as tm, item as f
where f.id = tm.resource_id
      and tm.tag_id = t.tag_id
      and tm.resource_id not in (select m.resource_id
                                 from tagmap m, tag t
                                 where m.tag_id = t.tag_id
                                       and t.name like '%meat%')
group by f.id;

我不能百分之百确定我是否理解您对查询结果的期望,但从我的理解来看,这可能会帮助您:

SELECT f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
FROM tag as t
left join tagmap as tm on tm.resource_id = t.tag_id
left join item as f on f.id = tm.resource_id
where t.name NOT LIKE '%meat%' 
GROUP by f.id
为了处理查询,这里是SQLFIDLE示例:

编辑:

因此,如果要排除附加到选定标记的任何资源,请尝试以下操作:

SELECT f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
FROM tag AS t 
INNER JOIN tagmap AS tm ON tm.resource_id = t.tag_id 
INNER JOIN item AS f ON f.id = tm.resource_id 
where tm.resource_id not in (
  select resource_id from tagmap 
  where tag_id in (select tag_id from tag WHERE name LIKE '%meat%')
)  
GROUP by f.id

与上述查询的结果相同。它显示resource_id=1。@YuryLankovskiy你是对的,请看修改后的答案。我不清楚你的答案。。。至于如何修改我的代码与最小的调整。我将尝试用我的语句替换你的语句,看看它是否适用于代码的其余部分。它似乎符合我的要求,但是,我将如何修改它以接收附加到resource_id的字段值。具体地说,f.id和f.food_name如我的原始代码所示。Thanks@YuryLankovskiy请看修改后的答案。我不完全理解您的要求,因此这可能有效,也可能无效。我正在这里运行查询,并收到正确的结果。。。但是,当我在服务器上运行查询时,我收到的资源\u id=2和3…请尝试使左连接到内部连接。实际上。。。我在这里运行一个查询,它返回的结果与我的服务器上的结果相同。知道吗?内部联接或左联接有相同的结果。由于我看不到错误,您期望的输出是什么?查询返回除meat以外的所有其他标记?
SELECT f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
FROM tag as t
left join tagmap as tm on tm.resource_id = t.tag_id
left join item as f on f.id = tm.resource_id
where t.name NOT LIKE '%meat%' 
GROUP by f.id
SELECT f.id, f.food_name, tm.resource_id, tm.tag_id, t.name 
FROM tag AS t 
INNER JOIN tagmap AS tm ON tm.resource_id = t.tag_id 
INNER JOIN item AS f ON f.id = tm.resource_id 
where tm.resource_id not in (
  select resource_id from tagmap 
  where tag_id in (select tag_id from tag WHERE name LIKE '%meat%')
)  
GROUP by f.id