Est-il possible KDB de faire ce qui suit:Comment faire une auto-jointure dans une requête KDB?
(vous donnant l'équivalent dans SQL)
select column1
from table1 alias1
join table1 alias2
where alias1.column2 = alias2.column2
Est-il possible KDB de faire ce qui suit:Comment faire une auto-jointure dans une requête KDB?
(vous donnant l'équivalent dans SQL)
select column1
from table1 alias1
join table1 alias2
where alias1.column2 = alias2.column2
Oui, par exemple:
q)t:([]k: 1 2 1; v:`A`B`C)
q)ej[`k;t;t]
k v
---
1 A
1 C
2 B
1 A
1 C
MISE À JOUR: vous pouvez filtrer les résultats cependant vous aimez:
q)select from ej[`k;t;t] where (v=`A) or k=2
k v
---
1 A
2 B
1 A
MISE À JOUR 2: Si vous avez besoin est tout ce que vous trouverez des doublons vous ne avez pas besoin de autojointure votre table tout:
q)t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
q)select from t where 1<(count;v)fby v
k v
---
1 A
3 A
4 C
5 C
Pour la 2ème question (ne me laissera pas commenter, afin d'ajouter ici) , vous pourriez peut-être faire quelque chose comme le ci-dessous
t:([]k: 1 2 3 4 5; v:`A`B`A`C`C)
select from t where v in (exec v from (select count i by v from t) where x>1)
ungroup select from (`v xgroup t) where (count each k)>1
Merci. Cela répond vraiment à mes besoins, j'ai marqué l'autre réponse, car elle concerne plus directement la question. – tonank
Merci. À mi-chemin:). Que diriez-vous d'une clause where? Dites que j'ai t: ([] k: 1 2 3; v: \ 'A \' B \ 'A) et je veux que la requête me retourne" 1 A "et" 3 A "(sur des lignes identiques ou différentes) qui ont le même 'v. – tonank
On dirait que je ne comprends pas ce que vous voulez retourner. Qu'est-ce que '3 A'? Il n'y a pas 3 dans mon exemple. –
Dans mon exemple il y a. Dans votre mise à jour, les clauses where contiennent des valeurs directes, je voulais éviter cela (comme dans l'exemple SQL). Jusqu'à présent, la réponse de Michael ci-dessous est la meilleure pour mes besoins, mais la vôtre est meilleure pour la question initiale. – tonank