2009-02-26 10 views
2

L'utilisation de ces tables, comme échantillon:Est-il possible en SQL de faire correspondre un LIKE à partir d'une liste d'enregistrements dans une sous-requête?

CodeVariations:

CODE 
----------- 
ABC_012 
DEF_024 
JKLX048 

RegisteredCodes:

CODE  AMOUNT 
-------- ------ 
ABCM012   5 
ABCK012  25 
JKLM048  16 

Est-il possible d'écrire une requête pour récupérer toutes les lignes RegisteredCodes lorsque CODE correspond à un modèle en ligne de la table CodeVariations? Autrement dit, une ligne qui correspond à un modèle LIKE soit 'ABC_012', 'DEF_024' ou 'JKLX048'

Résultat devrait être:

CODE  AMOUNT 
-------- ------ 
ABCM012   5 
ABCK012  25 

J'utilise PostgreSQL, mais il serait intéressant de savoir s'il est possible de le faire ceci dans une requête simple pour PostgreSQL ou tout autre DB.

Répondre

4

Est-ce que c'est ce dont vous avez besoin?

select distinct RC.* from RegisteredCodes RC, CodeVariations CV 
where RC.CODE LIKE CV.CODE; 
+0

Il doit être un SELECT DISTINCT si vous voulez permettre la situation où un CODE pourrait ressembler à plus d'un des CODEVARIATIONS.CODE Cela ne se produit pas dans les données, mais il y a des variations de code possibles où il pourrait. –

0

Est-ce que vous cherchez:

SELCET * FROM RegisteredCodes RC WHERE RC.Code IN (SELECT CODE FROM CodeVariations WHERE CODE LIKE ('ABC%') AND CODE LIKE ('%012') 

Cela ira chercher tout le dossier qui commencent par « ABC » et se termine par « 012 » et similaire pour « DEF » et « JKL ».
OU

vous cherchez quelque chose comme this?

0

Dans Oracle & PostgreSQL vous pouvez vous seul caractères génériques "_" pour les caractères uniques.

select RC.* from RegisteredCodes RC, CodeVariations CV 
where RC.CODE LIKE 'ABC_012'; 

utilisation Substring

select RC.* from RegisteredCodes RC, CodeVariations CV 
where RC.CODE LIKE substring(CV.Code,1,3)||'_'||substring(CV.Code,5) ; 
0
select * from CAT_ITEM where DESCRICAO LIKE '%TUBO%%PVC%%DNR%' 

Toutes liste comme est dans une chaîne.

Questions connexes