2016-08-24 25 views
0

auf Joinspalte ändern Ich habe diese ungültig MySQL-Anweisung:Bedingtes eine

UPDATE third_party_raw_stock_price AS r 
      IF feed_link_column = 'supplier_barcode' 
        JOIN options_new AS o 
         ON o.supplier_barcode = r.supplier_option_code 
      END IF 
      IF feed_link_column = 'supplier_code' 
        JOIN options_new AS o 
         ON o.supplier_code = r.supplier_option_code 
       END IF 
      JOIN third_party_config AS c 
       ON SUBSTRING(o.options_id, 3, 2) = c.code 
      SET o.price = 9.99, o.cost_price_variation = 3.33, o.stock = 7 
      LIMIT 2000 

Wie kann ich umschreiben diese dynamisch die Spalte options_new beitreten zu definieren? Ich brauche die Verbindung entweder ON o.supplier_code = r.supplier_option_code oder ON o.supplier_barcode = r.supplier_option_code, je nachdem, was von der third_party_raw_stock_price.third_party_raw_stock_price Spalte aufgerufen wird.

Antwort

1

Eine JOIN Anweisung ist im Grunde nur ein boolescher Test - wenn das Ergebnis des Tests (wie einfach oder kompliziert es auch ist) zu true auswertet, dann werden die Datensätze verknüpft. Wenn es falsch ist, dann gibt es keine Verbindung.

Das bedeutet, dass Ihre Joinbedingung als willkürlich komplex sein kann, wie Sie sie brauchen, so lange zu sein, wie es am Ende zu einem Wahr/Falsch-Wert läuft darauf hinaus:

SELECT ... 
FROM bar 
JOIN foo ON (foo.feed = 'barcode' AND foo.supplier = bar.supplier) 
      OR 
      (foo.feed = 'code' AND foo.code = bar.code)