我有一个表结构如下!--
-- 表的结构 `test`
--CREATE TABLE `test` (
  `id` int(11) NOT NULL auto_increment,
  `train_type` varchar(50) collate utf8_unicode_ci NOT NULL,
  `course_level` varchar(50) collate utf8_unicode_ci NOT NULL,
  `order_state` int(11) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ;--
-- 导出表中的数据 `test`
--INSERT INTO `test` (`id`, `train_type`, `course_level`, `order_state`) VALUES
(1, '面授', '二级', 2),
(2, '面授', '三级', 3),
(3, '远程', '一级', 6),
(4, '远程', '二级', 1);
我想写一条sql语句or语句怎么用!SELECT * 
FROM test
WHERE train_type = '远程'
AND course_level = '二级'
AND order_state =2
OR order_state =3
OR order_state =4
执行这条语句后为什么查出有面授的记录!请各位前辈帮忙!我觉的还是 or 语句那里的错误!

解决方案 »

  1.   

    我输入这个SQL语句应该什么结果都查不到才对!SELECT * 
    FROM test
    WHERE train_type = '远程'
    AND course_level = '二级'
    AND order_state =2
    OR order_state =3
    OR order_state =4
      

  2.   

     因为你 where 里面有  course_level = '二级'这句话啊。。 你去掉这段话
      

  3.   

    mysql>  SELECT *
        ->  FROM test
        ->  WHERE train_type = '远程'
        ->  AND course_level = '二级'
        -> and order_state in (2,3,4);
    Empty set (0.00 sec)
      

  4.   

    哈哈~~~成功了!非常感谢4楼前辈!!!SQL语句太强了!
      

  5.   

    SELECT * 
    FROM test
    WHERE train_type = '远程'
    AND course_level = '二级'
    AND (order_state =2
    OR order_state =3
    OR order_state =4
    )注意OR的运算优先级。
    MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html