2013-10-19 74 views
0

這裏是一個mySQL查詢。麻煩的是,我們需要一個前綴和後綴的訂單添加到theme.ref,使其匹配mySQL JOIN將文本添加到變量

SELECT * FROM content LEFT JOIN theme ON content.ID LIKE theme.ref 
WHERE content.status = 1 AND content.parent = 11 AND content.type = 'team' 
ORDER BY content.position ASC 

在第一個環節,它說content.ID LIKE theme.ref是有可能的主題前添加文本「ID」。之後的ref和','。可以做到這一點,如果是這樣做。

例如。 'ID'.theme.reg.','顯然不起作用。

回答

0

content.ID LIKE concat('ID',theme.ref,',')

但是該查詢將是低效的(如果theme.ref不包含通配符其等同的content.ID = concat('ID',theme.ref,','))。可能它應該被重寫或整個數據模型發生了變化。

+0

我會重寫結構,以免要求這樣做。我認爲它是緩慢的,因爲concat而不是因爲JOIN? –

+0

簡而言之,由於連接謂詞中的concat用法,效率可能很低:)擁有這樣的連接謂詞極大地限制了MySQL引擎的方式,因爲它可以選擇最佳查詢計劃。 –

+0

加入ax = bx(所謂的自然連接)對任何可用的算法都有好處:從a到b的嵌套循環(在bx上使用索引),從b到a的嵌套循環(在ax上使用索引),散列連接和排序 - 合併加入 - 所以RDBMS可以選擇任何並建立最佳計劃。在a.x = F(b.x)上加入會受到更多的限制 - 只能使用從b到a的嵌套循環(在a.x上使用索引)來完成,僅僅因爲在F(b.x)上不能有索引。哈希連接和排序合併連接很難實現,所以大多數RDBMS無法應用它們。 –