簡體   English   中英

用UNION和LEFT JOIN選擇

[英]SELECT with UNION AND LEFT JOIN

嗨,大家好,我一直在嘗試對我的網站搜索工具進行此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

所有表名均正確,所有列名均正確。

您名為“ 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語句/列名,但沒有添加需要獲得結果的聯接。

我認為此查詢從未奏效。 內部查詢沒有任何意義。 例如

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語句或聯接中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM