我有一個簡單的應用程序,用於跟蹤食客和他們最喜歡的口味和甜點。 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'爲基礎。這將使您不僅更容易思考問題,而且更容易讓其他人幫助您,更容易讓未來的開發人員(可能意味着您的未來自己)維護您的代碼。 –
這似乎也許你應該有一個'甜點'表,一個'味道'表,然後'甜點_味道'表。確切知道你試圖存儲什麼是有幫助的。 –