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