如何在排除某些值时从列中进行选择

时间:2011-11-14 20:36:32

标签: mysql

在MySQL中,是否可以从列中选择两个值(限制为2),不包括某些值?我们有一个包含库存的数据库,我想在他们有机器更新时向用户发送电子邮件。但是,在同一个库存系统中,我们有“nobody”(大约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

4 个答案:

答案 0 :(得分:2)

这样的事情:

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

答案 1 :(得分:1)

您的查询已关闭但不重复WHERE并将ORDER放在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

答案 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是按日期排序的所有按键LIMIT 2,针对所有按键排除。

试一试!!!

答案 3 :(得分:0)

我想提出一个更好的答案

SELECT user  FROM data
WHERE name NOT IN('mainconf','testing') LIMIT 2

这将返回名称不是 mainconftesting 的所有估价师

适用于高于 5.6 的 MySQL 版本