2017-10-13 6 views
1

J'ai deux tables dans Mysql, l'une est toutes les données que j'ai besoin d'afficher aux utilisateurs et une autre simplement une liste d'URL des éléments qui ont été supprimés.Mysql - Vérifier si une partie d'un résultat existe dans une autre table

Ce que je veux faire est de sélectionner tous les résultats tant que l'élément n'existe pas dans la table "éléments supprimés".

Dans ma table de "Deleted_Items" J'ai une liste d'URL de type

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

Mais dans ma table "Articles" la colonne URL contient les éléments suivants:

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

Je voudrais besoin de faire quelque chose comme ça (pseudo-code):

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

PS: Je eu un même c ase avec deux autres tables, mais la différence est que dans la « Articles » table, j'avais une liste d'ID et dans la « Deleted_Items » tableau que j'avais aussi une liste d'identifiants, donc j'appliqué la requête suivante:

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

Utilisez le même modèle anti-rejoindre comme le Requête "liste d'ID". On dirait que la condition correspondante (dans la clause ON) serait quelque chose comme ceci 'ON items.url LIKE CONCAT ('%', deleted_items.url, '%')'. (Les getchas potentiels avec la comparaison LIKE sont les caractères génériques '_' et'% '.) Une comparaison avec' LIKE' serait une comparaison d'expression régulière 'REGEXP' (avec des règles encore plus complexes avec des caractères spéciaux), ou utiliser' INSTR() 'ou' LOCATE() 'fonctions. – spencer7593

Répondre

1

vous pouvez utiliser une jointure gauche chèque deleted_item.url est nul

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

regardant votre échantillon de données supplémentaire pourrait être vous avez besoin d'un comme comparision

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

Mais il y aura un problème dans la comparaison? La liste d'URL dans "Deleted_Items" contient des URL de type "https://example.com/video/123456/" et les "Items" contiennent des URL de type "https://example.com/video/123456/dogs_and_cats " – Kokox

+0

réponse mise à jour .. – scaisEdge

+0

Merci pour l'aide, cela fonctionne, mais pour une raison quelconque ne fonctionne pas lorsque j'essaie d'ajouter un" ORDER BY ... "La phrase prend beaucoup de temps à travailler. – Kokox