2011-11-14 75 views
0

在MySQL中,是否可以从列中选择两个值(限制为2),但不包括某些值?我们拥有一个包含库存的数据库,并且当用户有机会进行更新时,我想发送一封电子邮件给用户。但是,在这个相同的库存系统中,我们有“没有人”(约10人)和“mainconf”(其中一个)用户,他们不是实际的用户,也不会收到电子邮件。如何从列中进行选择,同时排除某些值

所以基本上我想拉取2个值(按日期排序,我知道该怎么做),它排除了某些值(即“nobody”)被拉出。

所以将我的查询是这样的:

SELECT user from data ORDER by checkup_date WHERE data.name != "nobody" AND WHERE data.name != "mainconf" AND WHERE data.name != "testing" ASC limit 2 
+0

请在你正在查询的表格上添加SHOW CREATE TABLE。 – RolandoMySQLDBA

回答

2

事情是这样的:

SELECT value1, value2 FROM tablename 
WHERE tablename.name != "nobody" 
AND tablename.name != "mainconf" LIMIT 2; 
1

您所查询的是接近,但不重复的WHERE,把顺序WHERE后:

SELECT user from data WHERE name <> "nobody" AND name <> "mainconf" AND name <> "testing" ORDER by checkup_date ASC limit 2 

或者:

SELECT user from data WHERE name not in ("nobody" ,"mainconf", "testing") ORDER by checkup_date ASC limit 2 
0

你可以尝试这样的事:

SELECT B.* FROM 
(SELECT X.id 
FROM 
    (SELECT id FROM inventory 
    WHERE username IN ('nobody','mainconf') 
    ORDER BY date DESC LIMIT 2) X 
    LEFT JOIN 
    (SELECT id FROM inventory 
    WHERE username IN ('nobody','mainconf')) Y 
    USING (id) WHERE Y.id IS NULL 
) A 
INNER JOIN inventory B USING (id); 

您必须确保库存表有正确的索引,支持子查询:

ALTER TABLE inventory ADD INDEX date_id_ndx (date,id); 
ALTER TABLE inventory ADD INDEX username_id_ndx (username,id); 
ALTER TABLE inventory ADD INDEX username_date_id_ndx (username,date,id); 

的LEFT JOIN是有序的按日期的所有密钥针对所有键的限制2排除在外。

试试吧!

+0

神圣莫里,为何如此复杂?所有这些需求都是一个简单的'WHERE NOT IN()'... –

+0

这个查询将试图获得子查询'A'的两个键。然后,将两个键的INNER JOIN连接到主表。我之前完成了这个工作:http://stackoverflow.com/questions/5983156/fetching-a-single-row-from-join-table/6023217#6023217 – RolandoMySQLDBA

相关问题