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

所有表名都正确,所有列名都正确。

4

2 回答 2

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 语句/列名,但没有添加获得结果所需的加入。

于 2012-08-15T06:07:22.680 回答
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 语句或连接中。

于 2012-08-15T03:20:01.423 回答