我有一个简单的应用程序,用于跟踪食客和他们最喜欢的口味和甜点。 records
表只是餐馆的名称和ID,mid
表跟踪甜点和味道(再次通过链接到另一个值表的ID)。连接表上的多个WHERE子句
CREATE TABLE IF NOT EXISTS `records` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
INSERT INTO `records` (`id`, `name`) VALUES
(1, 'Jimmy Jones'),
(2, 'William Henry');
CREATE TABLE IF NOT EXISTS `mid` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`diner` int(11) NOT NULL,
`dessert` int(11) NOT NULL DEFAULT '0',
`flavor` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
INSERT INTO `mid` (`id`, `diner`, `dessert`, `flavor`) VALUES
(1, 1, 3, 0),
(2, 1, 2, 0),
(3, 1, 15, 0),
(4, 1, 0, 1),
(5, 2, 3, 0),
(6, 2, 6, 0),
(7, 2, 0, 4),
(8, 1, 34, 0),
(9, 2, 0, 4),
(10, 2, 0, 22);
我有点由什么应该是一个简单query--我想从records
表,其中某些甜点或香味的要求得到满足所有ID难倒:
SELECT a.id
FROM records AS a
JOIN mid AS b ON a.id = b.diner
WHERE b.dessert IN (3,2,6)
AND b.flavor IN (4,22)
这个查询即使存在与where子句匹配的记录,也不会返回任何行。我很确定我错过了JOIN
,但我已经尝试了INNER,OUTER,LEFT和RIGHT,但没有成功。
有人能让我走上正确的轨道,并解释我错过了什么吗?
感谢
将包含语句的语句换成语句或使其成为语句? –
我想谦卑地建议你给你的表格描述性/有意义的名字。我相信你这样做会让生活变得更容易。我会打电话给存放食客餐桌的餐桌,我可能会说另一个餐桌,我不知道,'餐'?很难说这些数据应该以'mid'为基础。这将使您不仅更容易思考问题,而且更容易让其他人帮助您,更容易让未来的开发人员(可能意味着您的未来自己)维护您的代码。 –
这似乎也许你应该有一个'甜点'表,一个'味道'表,然后'甜点_味道'表。确切知道你试图存储什么是有帮助的。 –