我有一個包含產品的表格和另一個包含這些產品名稱的表格(產品可以有多個不同語言的名稱)。定義哪一行用於連接
我目前使用這樣的查詢,列出所有產品名稱:
SELECT name
FROM name_table
LEFT JOIN product_table ON name_table.product = product_table.product
ORDER BY name_table.product, language != 'en', language != '*'
這將產生所有的名單和最佳的可用名稱(英文如果有的話,那麼國際名,如果不存在任何名稱)將始終首先出現。我只是略過每個產品第一個之後的所有條目 - 不夠高雅,但它的工作速度足夠快。
問題在於我無法按字母順序排序。
然而,當我使用這樣的:
SELECT
product,
(SELECT name
FROM name_table
WHERE name_table.product = product_table.product
ORDER BY language != 'en'
LIMIT 1) AS bestname
FROM product_table
ORDER BY bestname
那麼查詢速度極慢(至少與MySQL)。
這個查詢速度快,但它似乎是不確定的(因此準隨機)使用什麼名稱行:
SELECT name
FROM product_table
LEFT JOIN name_table ON name_table.product = product_table.product
ORDER BY name
如果我只可以告訴MySQL使用哪一行的加入,那麼一切都會沒事的。
如果存在多個匹配行,是否有方法可以定義連接中使用哪個行?
編輯:產品可以有任何語言的名稱,並不是所有的產品都有英文名稱,對於混淆抱歉。
編輯2:我發現了一個等價的問題:MySQL JOIN the most recent row only? 在那裏,SQL-gurus也使用子選擇(我的子選擇查詢非常緩慢,所以我想避免它),所以也許SQL不能做我想做的:-(
如何定義最佳可用名稱? – 2012-07-21 12:29:49