我正在使用php和mysql。我有两张桌子:
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', 'addr@yahoo.com', 'None','2015-01-13'),
(237, 'PLEASE SET', 'addr@yahoo.com', '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”并不存在。
发布于 2015-01-17 07:26:37
您可以为这项工作使用一个简单的加入:
SELECT
m1.*
FROM
mytable m1
INNER JOIN mytable2 m2
ON m1.history = m2.history 返回:
id emails phones history insert_date
237 PLEASE SET addr@yahoo.com 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函数关联起来。

发布于 2015-01-17 07:26:28
发布于 2015-01-17 07:30:14
尝试像history这样的简单连接公共字段,从两个表中使用内部连接并添加,其中条件可以获得其他criteria.for的更多信息,请参阅Mysql 接合
SELECT
m1.*
FROM
`mytable1` m1
INNER JOIN `mytable2` m2
ON m1.history = m2.history
WHERE `insert_date` >= DATE_SUB(CURDATE(), INTERVAL 3 DAY)https://stackoverflow.com/questions/27997211
复制相似问题