【问题标题】:Mysql connect two concat tables after processingmysql处理后连接两张concat表
【发布时间】:2015-12-16 13:25:30
【问题描述】:

我的目标是在一个表中呈现来自 DOC_sql 和 MDT_sql 的数据。找不到有关如何实施此链接的解决方案。

目标是搜索文档并根据匹配的标签呈现文档。

输入数据

CALL SearthDocuments('\'Book\',\'Currency\'', 'en_ENG');

代码

DELIMITER //
CREATE PROCEDURE SearthDocuments(IN VAR_TT_names VARCHAR(255), VAR_LANG_prefix CHAR(6))
BEGIN

SET @TT_sql = CONCAT('SELECT TAG_ID FROM TagTranslate WHERE TT_text IN (', VAR_TT_names, ')');
SET @DOC_ID_sql = CONCAT('SELECT DOC_ID FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');

SET @DOC_sql = CONCAT('SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = "', VAR_LANG_prefix, '"' );
SET @MDT_sql = CONCAT('SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');

-- SET @COM_sql = CONCAT('?')
-- PREPARE COM_stmt FROM @COM_sql;
-- EXECUTE COM_stmt;
-- DEALLOCATE PREPARE COM_stmt;
END
// DELIMITER ;

两个表都有标识符 DOC_ID

表:DOC_sql

DOC_ID, DT_ID, DT_desc, DT_title, A_name, LANG_prefix

表:MDT_sql

DOC_ID, TAG_HITS

【问题讨论】:

  • 如果你能说出这些表格的样子,那不是很好
  • 这是一个奇怪的函数,它使用concat 创建 sql 语句并尝试在两个表上执行多个级联 sql。表结构是什么,数据是什么,输出应该是什么?底线:要完成的基本任务是什么?

标签: mysql merge procedure concat


【解决方案1】:

这是问题的解决方案。工作代码。

DELIMITER //
    CREATE PROCEDURE SearthDocuments(IN VAR_TT_names VARCHAR(255), VAR_LANG_prefix CHAR(3))
    BEGIN

  SET @TT_sql = CONCAT('SELECT TAG_ID FROM TagTranslate WHERE TT_text IN (', VAR_TT_names, ')');
  SET @DOC_ID_sql = CONCAT('SELECT DOC_ID FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');

  SET @DOC_sql = CONCAT('SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = ',VAR_LANG_prefix);
  SET @MDT_sql = CONCAT('SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql, ') GROUP BY DOC_ID HAVING COUNT(DOC_ID)');

   SET @COM_sql = CONCAT('
       SELECT * FROM 
         (SELECT * FROM VIEW_Document WHERE DOC_ID IN (', @DOC_ID_sql, ') AND LANG_prefix = "',VAR_LANG_prefix,'") AS V_DOC
         LEFT JOIN 
         (SELECT DOC_ID, count(*) as TAG_HITS FROM DocumentTag WHERE TAG_ID IN (', @TT_sql ,') GROUP BY DOC_ID HAVING COUNT(DOC_ID)) as Searth
         on V_DOC.DOC_ID = Searth.DOC_ID ORDER BY TAG_HITS DESC;'
     );

     PREPARE COM_stmt FROM @COM_sql;
     EXECUTE COM_stmt;
     DEALLOCATE PREPARE COM_stmt;

END
// DELIMITER ;

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2022-01-20
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-08
    • 1970-01-01
    相关资源
    最近更新 更多