我有以下表结构:
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}}子句。
答案 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)
)