mysql - 把三个中频换成一个

标签 mysql

创建表语句:

CREATE TABLE `Tovar` (
    `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
    `idPreparat` MEDIUMINT(6) UNSIGNED NULL DEFAULT NULL,
    `drugApt` VARCHAR(250) NULL DEFAULT NULL,
    `countryApt` VARCHAR(250) NULL DEFAULT NULL,
    `manfApt` VARCHAR(250) NULL DEFAULT NULL,
    `md5` BINARY(16) NOT NULL,
    PRIMARY KEY (`id`),
    INDEX `ix_prep` (`idPreparat`),
    INDEX `ix_md5` (`md5`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;

查询:

 SELECT id,
    IF(COUNT(Tovar.id)=1,Tovar.drugApt,'') AS `drugApt`,
    IF(COUNT(Tovar.id)=1,Tovar.countryApt,'') AS `countryApt`,
    IF(COUNT(Tovar.id)=1,Tovar.manfApt,'') AS `manfApt`
    FROM Tovar
    WHERE Tovar.md5=0x00000000000000000000000000000000
    GROUP BY Tovar.idPreparat

如何将三个 IF 替换为一个 IF(COUNT(Tovar.id)=1,,) ? 添加我的想法:

    CASE COUNT(Tovar.id)>1
WHEN true THEN CONCAT_WS(@drugApt:='Tovar.drugApt',@countryApt='Tovar.countryApt',@manfApt='Tovar.manfApt') 
WHEN false THEN CONCAT_WS(@drugApt:='',@countryApt='',@manfApt='')
END

最佳答案

如果我正确理解您的请求,子查询可能有助于实现所需的结果:

SELECT  tmp.id,
        COALESCE(t.drugApt, '') as drugApt,
        COALESCE(t.countryApt, '') as countryApt,
        COALESCE(t.manfApt, '') as manfApt
FROM    (
            SELECT      id,
                        IF(COUNT(id)=1, 1, 0) as cond
                FROM    Tovar
                WHERE   md5 = 0x00000000000000000000000000000000
              GROUP BY  idPreparat
        ) tmp
LEFT JOIN   Tovar t
    ON  t.id = tmp.id
    AND tmp.cond = 1

这有帮助吗?

关于mysql - 把三个中频换成一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357349/

相关文章:

mysql - 我无法在 mysql 表中创建多个 'DATE' 属性

mysql - 如何为注释添加外键、引用和索引

java - 从数据库接收数据时出现空指针异常

mysql - 合并两个表数据的查询

PHP 通过 id 而不是 name 更新 MySQL

mysql - 从 csv 加载数据时如何忽略/跳过 LOAD DATA INFILE 中的无效数据行。

php - mysql 查询不显示正确的输出

mysql - 将数据插入同一表中的列中

两个不同元素 ID 的 JavaScript 作为同一函数工作

mysql - #1111 - 组功能使用无效