[英]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.