我的MySQL查詢的想法是創建特定類型的表的聯合,例如供應商(例如零售商,批發商等)。一旦我有供應商,我想選擇分配給訂單的供應商的名稱和地址。MySQL:JOIN ON SELECT UNION的條件
我有一個JOIN:
SELECT o.*, v.*
FROM order o
INNER JOIN (
SELECT 'retailer' AS type, r.id AS type_id, r.name, r.address FROM retailer AS r
UNION ALL
SELECT 'wholesaler' AS type, w.id AS type_id, w.name, w.address FROM wholesaler AS w
) AS v ON CONVERT(v.type AS utf8) = o.vendor_type AND CONVERT(v.type_id AS utf8) = o.vendor_type_id
問題1:你覺得這是做到這一點的最好方法是什麼?
a)一個供應商表也不會有任何更好,除非有一個名字和 地址字段在供應商表中選擇;這似乎是多餘的 起名字和地址已經在供應商特定的表 (如零售商表)
B)也許LEFT JOIN每個供應商特定的表是最好的, 雖然NULL值處處會得到一種醜陋。 性能方面,是的,這可能是最好的選擇。 UNION 看起來有點笨重。思考?
問題2:我不必使用CONVERT()在我的JOIN條件,其中字段是從UNION到來。 UNION字段是COERCIBLE,所有其他字段都是latin_swedish。你認爲在條件下使用CONVERT()會減慢我的JOIN嗎?
爲什麼他們分成不同的表? – Strawberry
感謝您的詢問。他們分裂的原因是他們的目的非常不同;他們的關聯表也不一樣。上面的表名只是理論上的。 – axiom82
在join中使用'convert()'可能會降低速度。 –