有条件地更改列上的连接


Conditionally change a join on column

我有这个无效的mysql语句:

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

我如何重写这个动态定义options_new连接列?我需要连接为ON o.supplier_code = r.supplier_option_codeON o.supplier_barcode = r.supplier_option_code,这取决于third_party_raw_stock_price.third_party_raw_stock_price列所调用的。

JOIN语句基本上只是一个布尔测试-如果测试的结果(无论简单或复杂)计算为true,则记录被连接。如果为false,则没有join。

这意味着您的连接条件可以任意复杂,只要它最终归结为一个真/假值:

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