Question

J'écris une requête pour faire des choses. Mais cela ne fonctionne pas comme je le souhaite:

select CORR_ID from TABLE1
where CORR_ID not in (select id from TABLE2)

Le problème est que TABLE2.id est long, alors que TABLE1.CORR_ID est une chaîne.

Alors, comment puis-je le faire fonctionner?

PS: j'utilise IBM UDB.

Était-ce utile?

La solution

OK, j'ai trouvé une méthode:

select CORR_ID from TABLE1 where CORR_ID not in 
(select CAST( CAST(id AS CHAR(50)) AS VARCHAR(50) ) from TABLE2)

C'est assez intriguant: vous ne pouvez pas convertir un BIGINT en VARCHAR, mais:

  • vous pouvez lancer un BIGINT en CHAR
  • et vous pouvez lancer un CHAR TO VARCHAR

c'est ridicule!

Autres conseils

DB2 permet de comparer une colonne VARCHAR à une colonne CHAR, sans transtypage supplémentaire. Il vous suffit donc de convertir le nombre.

SELECT corr_id FROM table1 WHERE corr_id PAS IN (SELECT CHAR (id) FROM table2)

Vous devriez pouvoir convertir la colonne id sélectionnée pour qu'elle corresponde au type de données corr_id

.

sélectionnez CORR_ID dans TABLE1 où CORR_ID n'est pas présent (sélectionnez la distribution (id en tant que varchar) dans TABLE2)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top