MySQL - UNION SELECT 与 RLIKE 和 GROUP BY - 无法插入 INNER JOIN

标签 mysql group-by left-join inner-join union

我创建了一个 mySQL 查询来搜索单词并按相关性(排序键)对结果进行排序。例如,如果我搜索“test word”,我的查询将如下所示(并且它的工作原理就像一个魅力):

SELECT * 
FROM (  SELECT *, 1 as SortKey 
        FROM equipments 
        WHERE (
            DESCRIPTION RLIKE '[[:<:]]test word[[:>:]]' 
            OR EQUIPMENT_ID RLIKE '[[:<:]]test word[[:>:]]' 
            OR CATEGORY RLIKE '[[:<:]]test word[[:>:]]'
        )

        UNION SELECT *, 2 as SortKey 
        FROM equipments 
        WHERE (
                (DESCRIPTION RLIKE '[[:<:]]test[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]test[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]test[[:>:]]' OR 
                DESCRIPTION RLIKE '[[:<:]]tests[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]tests[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]tests[[:>:]]') 

                AND

                (DESCRIPTION RLIKE '[[:<:]]word[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]word[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]word[[:>:]]' OR 
                DESCRIPTION RLIKE '[[:<:]]words[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]words[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]words[[:>:]]')
            )

        UNION SELECT *, 3 as SortKey 
        FROM equipments 
        WHERE (
                (DESCRIPTION RLIKE '[[:<:]]test[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]test[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]test[[:>:]]' OR 
                DESCRIPTION RLIKE '[[:<:]]tests[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]tests[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]tests[[:>:]]')
                ) 
                OR (
                (DESCRIPTION RLIKE '[[:<:]]word[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]word[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]word[[:>:]]' OR 
                DESCRIPTION RLIKE '[[:<:]]words[[:>:]]' OR 
                EQUIPMENT_ID RLIKE '[[:<:]]words[[:>:]]' OR 
                CATEGORY RLIKE '[[:<:]]words[[:>:]]')
            )

) T1 GROUP BY EQUIPMENT_ID ORDER BY `SortKey` ASC

所以,正如我所说,它有效,但我想在查询中插入 INNER JOIN,我试图将它放在任何地方,但没有任何效果。通常,为了显示所有结果而不查找关键字,我使用此查询(再次,它工作正常):

SELECT
    `equipments`.`DESCRIPTION`,
    `equipments`.`EQUIPMENT_ID`,
    `equipments`.`CATEGORY`,
    `live_data`.`SERVICE`,
    `live_data`.`HOURS` 
FROM equipments 
INNER JOIN customers ON `customers`.`EQUIPMENT_ID` = `equipments`.`EQUIPMENT_ID`
LEFT JOIN live_data ON `live_data`.`EQUIPMENT_ID` = `equipments`.`EQUIPMENT_ID`
WHERE `customers`.`customer_id` = 1

我需要插入 INNER JOIN 来添加 WHERE 语句以仅搜索客户的设备。请帮助我!

最佳答案

select innerresult.* From
( Insert your query here ) innerresult
inner join customers On customers.equipment_id = innerresult.equipment_id
Where customers.customer_id = 1

我认为应该这样做。

关于MySQL - UNION SELECT 与 RLIKE 和 GROUP BY - 无法插入 INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20521469/

相关文章:

MYSQL 双 WHERE 子句不适用于 = 和 AND

mysql - MariaDB/MySQL 查询区分大小写吗?

mysql选择主记录和多个辅助记录作为排序数据集

mysql - LEFT JOIN 与 GROUP BY 返回意外结果

mysql - GROUP BY 之前的 LEFT JOIN + ORDER BY

mysql - 需要帮助的初学者 sql 学生

mysql - 亚马逊 RDS mysqbinlog "Could not find first log file name in binary log index file"

r - 如何对已过滤数据表的每一行进行过滤和分组操作

sql-server - SQL SUM(QTY) 但仅适用于 QTY > 0 的记录

sql仅按顺序的行进行分组