我正在使用php和mysql。我有2张桌子:
CREATE TABLE IF NOT EXISTS `mytable` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`emails` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`phones` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`insert_date` date DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;
INSERT INTO `mytable` (`id`, `emails`, `phones`, `history`, `insert_date`)
VALUES
(118, 'PLEASE SET', '[email protected]', 'None','2015-01-13'),
(237, 'PLEASE SET', '[email protected]', 'gomez', '2015-01-11');
和
CREATE TABLE IF NOT EXISTS `mytable2` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`history` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=259 ;
INSERT INTO `mytable2` (`id`, `history`)
VALUES
(1, 'bob',),
(2 , 'gomez');
选择之后:
SELECT *
FROM `mytable1`
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
我想在mytable2中找到具有与上述查询选择的历史记录字段匹配的历史记录字段的记录子集。这基本上是一个基于历史字段的交集。我不确定如何在mysql中编写代码,尤其是因为不存在“ intersect”。
您可以使用一个简单的JOIN来完成这项工作:
SELECT
m1.*
FROM
mytable m1
INNER JOIN mytable2 m2
ON m1.history = m2.history
返回:
id emails phones history insert_date
237 PLEASE SET [email protected] gomez 2015-01-11
您的问题中的查询如下所示:
SELECT
m1.*
FROM
mytable m1
INNER JOIN mytable2 m2
ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)
而且,由于唯一符合条件的记录的日期早于3天,因此它不会正确返回任何内容。
这是一个非常有用的信息图,将集合操作与SQL函数相关联
http://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_orig.jpg
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句