首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MySQL中压缩表?

如何在MySQL中压缩表?
EN

Stack Overflow用户
提问于 2021-02-27 16:30:02
回答 2查看 109关注 0票数 0

如果有人能帮我,我会很高兴的:我有一个MYSQL表:

代码语言:javascript
运行
复制
    -- ----------------------------
    -- Table structure for `massimp`
    -- ----------------------------
    DROP TABLE IF EXISTS `massimp`;
    CREATE TABLE `massimp` (
      `recid` int(11) NOT NULL AUTO_INCREMENT,
      `Artikelnummer` varchar(100) DEFAULT NULL,
      `Lieferant` varchar(100) DEFAULT NULL,
      `SafetyFilename` varchar(2000) DEFAULT NULL,
      `SpecFilename` varchar(2000) DEFAULT NULL,
      PRIMARY KEY (`recid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of massimp
    -- ----------------------------
    INSERT INTO `massimp` VALUES ('1', 'T1503', 'SIGMA-ALDRICH', 'H:\\USERDATA\\MSDS-DEMO\\Sigma-Aldrich\\MSDS\\T1503_PrintMSDSAction.pdf', '');
    INSERT INTO `massimp` VALUES ('2', '101614', 'MERCK', '', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\SPEC\\101614_494-Vitamin B12-111988.pdf');
    INSERT INTO `massimp` VALUES ('3', '101116', 'MERCK', '', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\SPEC\\101116_AT_DE_0002_Food_and_Beverage_Campaign_Adulerants_Non-native_Amino_Acids_In_Milk_MM.pdf');
    INSERT INTO `massimp` VALUES ('4', '101614', 'MERCK', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\MSDS\\101614_SDS_AT_DE.PDF', '');
    INSERT INTO `massimp` VALUES ('5', '101116', 'MERCK', 'H:\\USERDATA\\MSDS-DEMO\\Merck\\MSDS\\101116_SDS_AT_DE.PDF', '');

当我执行这样的查询时:

代码语言:javascript
运行
复制
      SELECT a.safetyfilename, b.specfilename, a.Artikelnummer,a.Lieferant from massimp a 
         join massimp b on a.Artikelnummer=b.Artikelnummer and a.Lieferant= b.Lieferant;

我得到了这个输出,这不是我想要的结果:

我想要一张桌子

如果Artikelnummer的safetyfilename和specfilename是可用的,则应该打印他的行--只有这一行用于规范Artikelnummer.

  • if,只有一个文件名可用--应该打印雪崩文件名。

  • ,如果没有可用的文件名,则不应该打印

有人能告诉我如何在MySQL查询中完成这个复杂的操作吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-27 17:06:54

这应该能做你想做的。

代码语言:javascript
运行
复制
SELECT 
    CASE 
        WHEN b.specfilename != '' THEN b.specfilename
        ELSE a.safetyfilename
    END AS filename,
    a.Artikelnummer,
    a.Lieferant 
FROM massimp a 
    JOIN massimp b ON
        a.Artikelnummer=b.Artikelnummer AND 
        b.Lieferant= b.Lieferant
WHERE (a.SafetyFilename != '' OR b.SpecFilename != '');
票数 1
EN

Stack Overflow用户

发布于 2021-02-27 22:45:31

谢谢马克B,有了你的主意我才能做到:

代码语言:javascript
运行
复制
    SELECT 
        a.SafetyFilename,
        b.SpecFilename,
        a.Artikelnummer,
        a.Lieferant 
    FROM massimp a 
        JOIN massimp b ON
            a.Artikelnummer=b.Artikelnummer AND 
            b.Lieferant= b.Lieferant
    WHERE (a.SafetyFilename != '' and b.SpecFilename != '')
    
    union 
    Select
        a.SafetyFilename,
        b.SpecFilename,
        a.Artikelnummer,
        a.Lieferant 
    FROM massimp a 
        JOIN massimp b ON
            a.Artikelnummer=b.Artikelnummer AND 
            b.Lieferant= b.Lieferant
    WHERE (a.SafetyFilename = '' and b.SpecFilename != '')
    union 
    Select
        a.SafetyFilename,
        b.SpecFilename,
        a.Artikelnummer,
        a.Lieferant 
    FROM massimp a 
        JOIN massimp b ON
            a.Artikelnummer=b.Artikelnummer AND 
            b.Lieferant= b.Lieferant
    WHERE (a.SafetyFilename != '' and b.SpecFilename = '')
    ;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66400925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档