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 に答える