En utilisant SQLite, disons que j'ai ces deux tables:Trouver un ensemble de colonnes distinct dans deux tables?
A
_id num name group data1 data2
1 4 ABC I
2 4 CDE I
3 5 CDE I
4 5 CDE I
5 5 CDE II
B (doesn't have a _id column)
num name group data1 data2
4 ABC I x y
4 CDE I x1 y1
5 CDE I x2 y2
5 CDE I x3 y3
5 CDE II x4 y4
6 DEF III x5 y5
Notez que je n'ai pas de clé primaire dans le tableau B. Je veux mettre à jour les valeurs du tableau A avec les valeurs de données du tableau B, mais seulement pour les lignes qui peuvent être identifiées de manière unique par les colonnes num
, name
et group
dans les deux tables ou qui n'existent pas du tout dans le Tableau A. Ces colonnes sont essentiellement une sorte de clé combinée, et le seul moyen de connecter deux lignes dans la base de données .
Le résultat ressemblerait à quelque chose comme ceci:
A
_id num name group data1 data2
1 4 ABC I x y
2 4 CDE I x1 y1
3 5 CDE I
4 5 CDE I
5 5 CDE II x4 y4
6 6 DEF III x5 y5
J'ai essayé d'envelopper ma tête autour de cela pour quelques jours et essayé diverses solutions, mais aucun qui semble tout bon. Mes tables actuelles contiennent environ 3000 lignes chacune (le tableau B est une mise à jour du tableau A avec quelques centaines de changements mineurs). J'en suis venu à la conclusion qu'il faudra apporter des modifications manuelles aux lignes qui ne sont pas facilement identifiables, mais il serait bon de les minimiser autant que possible. La plupart des lignes semblent avoir des combinaisons uniques de num
, name
et group
, c'est mon objectif pour le moment.
J'ai eu une idée de sélectionner tous distincts (en ce qui concerne num
, name
et group
) les lignes du tableau A et toutes les lignes de la même distinctes du tableau B, et alors je devrais être en mesure de simplement itérer sur les lignes de B, trouver le correspondant (encore une fois en ce qui concerne les colonnes num
, name
et group
) lignes du tableau A et copier les valeurs de B à A.
Mais je ne suis pas sûr que ce la façon de le faire, ou comment s'y prendre il ...
Vous pouvez 'LEFT JOIN TableA' et trouver les combinaisons de' num', '' et name' group' n'obtiendra pas de _id dans la TableA et nécessitera une entrée manuelle. Je ne vois pas quel est le problème de mise à jour de ceux qui correspondent, vous faites juste 'inner join'? Peut-être que SQLite ne supporte pas 'UPDATE [..] FROM', donc vous avez juste besoin de faire une boucle dans un langage de programmation qui va exécuter ~ 3000 mises à jour. –
@ ŁukaszKamiński Le problème est que je ne peux mettre à jour que ceux qui ont une combinaison distincte de 'num',' name' et 'group' dans les deux tables. Je ne suis pas sûr de savoir comment faire cela avec un «INNER JOIN»? N'ai-je pas besoin d'utiliser 'DISTINCT' quelque part? – BadCash
Les deux tables peuvent avoir plus d'une ligne pour un ensemble donné de 'num, name, group'? –