【问题标题】:MySQL - UNION SELECT with RLIKE and GROUP BY - not able to insert INNER JOINMySQL - 带有 RLIKE 和 GROUP BY 的 UNION SELECT - 无法插入 INNER JOIN
【发布时间】:2013-12-11 14:15:28
【问题描述】:

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

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 语句以仅搜索到客户的设备。请帮帮我!

【问题讨论】:

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


    【解决方案1】:
    select innerresult.* From
    ( Insert your query here ) innerresult
    inner join customers On customers.equipment_id = innerresult.equipment_id
    Where customers.customer_id = 1
    

    我认为应该这样做。

    【讨论】:

    • 谢谢!这正是我需要的!
    • 经过反思,我还需要从“live_data”表中获取“SERVICE”和“HOURS”值。我在 INNER JOIN 行和 WHERE 行之间添加了行“LEFT JOIN live_data ON live_data.EQUIPMENT_ID = innerresult.EQUIPMENT_ID”,但我不知道如何选择“服务”和“小时”......我尝试了一些事情,但这并不成功...
    • 就是这样!非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多