有条件地更改列上的连接

时间:2016-08-24 14:14:23

标签: php mysql

我有这个无效的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列要求的加入。

1 个答案:

答案 0 :(得分:1)

JOIN语句基本上只是一个布尔测试 - 如果测试结果(无论多么简单或复杂)评估为true,那么记录就会被连接起来。如果它是假的,则没有加入。

这意味着你的连接条件可以像你需要的那样复杂,只要它最终归结为真/假值:

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