INVOEGEN tussen tabellen met INNER JOIN

Een eerdere gegevensimport in CiviCRM plaatste enkele lednummers in een aangepast veld ( member_number ) in plaats van het nuttiger ( external_id ) veld.

Mijn (toegegeven beperkte) SQL-vaardigheden zijn veel te roestig, maar wat ik probeer te doen is:

  1. ALS het veld external_id leeg is,
  2. EN de contact_type is "Individueel"
  3. DAN kopieer de gegevens van lidnummer naar external_id voor het overeenkomende interne id-nummer.

Ik heb een paar varianten hiervan geprobeerd, met verschillende fouten:

INSERT INTO test_table (external_id)
SELECT member_number 
FROM member_info
INNER JOIN test_table
ON memberinfo.entity_id=test_table.id
WHERE test_table.external_id IS NULL AND test_table.contact_type = "Individual"

Heb ik de INNER JOIN zelfs echt nodig? En ik weet dat de WHERE-instructie meestal verwijst naar de tabel waar je aan trekt, niet degene waar je naartoe invoegt, maar ik kan me niet de juiste manier herinneren om dit te doen.

2
Wat is de tabelstructuur voor test_tabel? en wat is de fout die je krijgt?
toegevoegd de auteur ysrb, de bron
Oeps, bedoeld om dat op te nemen. De test_table is een kloon uit de tabel civicrm_contacts, nogal wat velden die meestal varchar zijn; De fout is: # 1062 - Dubbele invoer '0' voor sleutel 'UI_external_identifier'
toegevoegd de auteur briank, de bron
Nevermind .... Ik heb eindelijk de "dubbele invoer" waar het naar verwijst gevonden, bleek dat er 2 "0" waarden waren bij de NULLEN. Ik weet niet waarom de andere fouten opdoken, maar uiteindelijk lukte het om te werken. Bedankt...
toegevoegd de auteur briank, de bron

1 antwoord

update test_table
set external_id = 
if(external_id = '' and contact_type = 'Individual', member_number,external_id)
2
toegevoegd
Deze heeft het niet gedaan, maar ik hou van de eenvoud en ik weet zeker dat dit op de goede weg is. Ik krijg nog steeds een foutmelding: "# 1054 - Onbekende kolom 'member_number' in 'field list'"
toegevoegd de auteur briank, de bron