2017-10-13 37 views
1

我在Mysql中有两个表,一个是我需要向用户显示的所有数据,另一个是简单列出已删除项目的URL的列表。Mysql - 验证是否在另一个表中存在结果的一部分

我想要做的是选择所有的结果,只要该元素不存在于“已删除的项目”表中。

在我的“Deleted_Items”的表我有类型的URL列表

https://example.com/video/123456/ 

但在我的表“项目”的网址列包含以下内容:

https://example.com/video/123456/dogs_and_cats/ 

我会需要做的是这样的(伪):

SELECT id, url, thumb FROM Items 
WHERE Items.url NOT CONTAINS Deleted_Items.url 

PS: 我有一个类C ASE与其他两个表,但不同的是,在“项目”表我的ID,并在“Deleted_Items”表我也有ID的列表清单,所以我申请以下查询:

SELECT id, url, thumb 
FROM Items 
LEFT OUTER JOIN Deleted_Items 
ON (Items.url = Deleted_Items.url) 
WHERE Deleted_Items.url IS NULL 
LIMIT 30 
+0

使用相同的反连接图案与“ID列表”查询。似乎匹配条件(在ON子句中)就像这样:ON items.url LIKE CONCAT('%',deleted_items.url,'%')'。 (LIKE比较的潜在问题是'_'和'%'通配符。)'LIKE'比较的替代方法是正则表达式比较'REGEXP'(带有特殊字符的更复杂的规则),或者使用' INSTR()'或'LOCATE()'函数。 – spencer7593

回答

1

你可以使用一个左连接支票deleted_item.url是空

SELECT Items.id, Items.url, .Itemsthumb 
FROM Items 
LEFT JOIN deleted_Items ON Items.url = deleted_Items.url 
where deleted_Items.url is null 

期待您添加的数据样本可能是你需要一个像比较

SELECT Items.id, Items.url, .Itemsthumb 
FROM Items 
LEFT JOIN deleted_Items ON deleted_Items.url like concat(Items.url , '%') 
where deleted_Items.url is null 
+0

但是比较中会出现一些问题吗? “Deleted_Items”中的网址列表包含类型为“https://example.com/video/123456/”的网址,“Items”包含类型为“https://example.com/video/123456/dogs_and_cats”的网址“ – Kokox

+0

答案已更新.. – scaisEdge

+0

感谢您的帮助,此工作正常,但由于某种原因,我尝试添加”ORDER BY ...“时无法正常工作。此句需要很长时间才能生效。 – Kokox

相关问题