如何在MySQL中使用IN子句和zerofill字段选择行

时间:2016-05-10 15:54:33

标签: mysql

我有以下表结构:

CREATE TABLE `ss_highlight_ids` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `highlight_id` int(10) unsigned zerofill NOT NULL DEFAULT '0000000000',
    PRIMARY KEY (`id`),
    UNIQUE KEY `highlight_id_UNIQUE` (`highlight_id`),
    KEY `highlight_id_INDEX` (`highlight_id`) COMMENT ''
) ENGINE=InnoDB AUTO_INCREMENT=13580 DEFAULT CHARSET=latin1

我想使用另一个表的ID来选择ss_highlight_ids highlight_id中具有相同ID的所有行。

我用来选择行的查询如下:

SELECT
    *
FROM
    `ss_highlight_ids` AS `hi`
WHERE
    `hi`.`highlight_id` IN(
        SELECT 
            LPAD( `p`.`ID`, 10, '0' ) AS `ID`
        FROM 
            ss_posts AS `p`
        WHERE
            `p`.`post_type` = 'football-highlights'
            AND `p`.`post_date` > DATE_SUB(NOW(), INTERVAL 1 DAY)
    )

但遗憾的是没有退货。所以问题是我做错了什么或者我应该做些什么。

请注意,我的数据库中有相关数据,我尝试使用IN代替=使用ID一个IN值并且有效,但不会使用{{1}}子句。

1 个答案:

答案 0 :(得分:1)

你应该将lpad也用于zerofill列,因为我认为零填充仅用于渲染但不用于评估

SELECT  *
FROM  `ss_highlight_ids` AS `hi`
WHERE
lpad(`hi`.`highlight_id`, 10 , '0')  IN(
    SELECT  LPAD( `p`.`ID`, 10, '0' ) 
    FROM  ss_posts AS `p`
    WHERE `p`.`post_type` = 'football-highlights'
    AND `p`.`post_date` > DATE_SUB(NOW(), INTERVAL 1 DAY)
)