2012-08-15 66 views
-1

嗨,大家好我一直在嘗試這個SQL搜索查詢我的網站搜索設施,它應該搜索和按相關性排序。它在沒有左連接的情況下工作,我無法使用左連接工作。這是SQL查詢。選擇與聯盟和左聯接

SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
     bl_bands.bandpage as bandpage, sum(relevance) 
FROM bl_albums 
LEFT JOIN(
    SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
      bl_bands.bandpage as bandpage,10 AS relevance 
    FROM bl_albums 
    WHERE bl_albums.name like 'Camera' 
    UNION 
    SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
     bl_bands.bandpage as bandpage, 7 AS relevance 
    FROM bl_albums 
    WHERE bl_albums.name like 'Camera%' 
    UNION 
    SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
      bl_bands.bandpage as bandpage, 5 AS relevance 
    FROM bl_albums 
    WHERE bl_albums.name like '%Camera' 
    UNION 
    SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
     bl_bands.bandpage as bandpage, 2 AS relevance 
    FROM bl_albums 
    WHERE bl_albums.name like '%Camera%' 
) bl_bands on bl_albums.bandid = bl_bands.id 
GROUP BY bl_albums.name 
ORDER BY relevance desc 

所有的表名都是正確的,所有的列名都是正確的。

+0

你的工作意味着什麼 - 它在做什麼。你使用的是哪個SQL服務器(該組看起來像mysql,但字符串常量看起來像sql server)。你真的有一個工作查詢返回你在宇宙結束之前所期望的結果嗎? – Hogan 2012-08-15 03:16:54

回答

3

您命名爲「bl_bands」的子查詢沒有bl_bands.id,因爲所有聯合連接都不包含bl_bands表。試着增加連接到每一個工會,如果我對您的所有數據的假設是正確的:

SELECT 
    bl_albums.*, 
    bl_bands.name as bandname, 
    bl_bands.id as bandid, 
    bl_bands.bandpage as bandpage, 
    sum(relevance) 
FROM 
    bl_albums 
    LEFT JOIN(
     SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
       bl_bands.bandpage as bandpage,10 AS relevance 
     FROM bl_albums 
     JOIN bl_bands ON bl_bands.id = bl_albums.bandid 
     WHERE bl_albums.name like 'Camera' 
     UNION 
     SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
      bl_bands.bandpage as bandpage, 7 AS relevance 
     FROM bl_albums 
     JOIN bl_bands ON bl_bands.id = bl_albums.bandid 
     WHERE bl_albums.name like 'Camera%' 
     UNION 
     SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
       bl_bands.bandpage as bandpage, 5 AS relevance 
     FROM bl_albums 
     JOIN bl_bands ON bl_bands.id = bl_albums.bandid 
     WHERE bl_albums.name like '%Camera' 
     UNION 
     SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
      bl_bands.bandpage as bandpage, 2 AS relevance 
     FROM bl_albums 
     JOIN bl_bands ON bl_bands.id = bl_albums.bandid 
     WHERE bl_albums.name like '%Camera%' 
    ) bl_bands ON bl_albums.bandid = bl_bands.id 
GROUP BY bl_albums.name 
ORDER BY relevance desc 

看起來你可能已經複製/粘貼一些SELECT語句/列的名字,但沒有補充說,你所需要的加盟得到結果。

0

我不相信這個查詢曾經工作過。內部查詢沒有意義。例如

SELECT bl_albums.*, bl_bands.name as bandname, bl_bands.id as bandid, 
     bl_bands.bandpage as bandpage,10 AS relevance 
FROM bl_albums 
WHERE bl_albums.name like 'Camera' 

該查詢包含許多用bl_bands預先固定的字段,但該表不包含在from語句或聯接中。