1

尝试编写并执行一个 MySQL 查询来显示所有电影的电影编号、电影名称、电影成本和电影类型,这些电影要么是动作电影,要么是喜剧电影,而且成本低于 50 美元。按流派升序对结果进行排序。

mysql> select mv_no, mv_name, mv_cost, mv_genre from movie    
    -> where mv_genre = ('Action' or 'Comedy') and mv_cost < 50    
    -> order by mv_genre;

+-------+----------------------------+---------+----------+
| mv_no | mv_name                    | mv_cost | mv_genre |    
+-------+----------------------------+---------+----------+    
| 1245  | Time to Burn               | 45.49   | ACTION   |    
| 1237  | Beatnik Fever              | 29.95   | COMEDY   |    
| 1239  | Where Hope Dies            | 25.49   | DRAMA    |    
| 1234  | The Cesar Family Christmas | 39.95   | FAMILY   |    
+-------+----------------------------+---------+----------+
4 rows in set, 10 warnings (0.00 sec)
4

4 回答 4

1

改成:

select mv_no, mv_name, mv_cost, mv_genre from movie

where (mv_genre = 'Action' or mv_genre = 'Comedy') and mv_cost < 50

order by mv_genre;
于 2013-04-08T15:55:25.837 回答
0

您是否尝试过使用IN子句:

select mv_no, mv_name, mv_cost, mv_genre 
from movie
where mv_genre in ('Action', 'Comedy') 
  and mv_cost < 50

请参阅带有演示的 SQL Fiddle

或者您可以更改使用该OR子句的方式:

select mv_no, mv_name, mv_cost, mv_genre 
from movie
where (mv_genre = 'Action' or mv_genre= 'Comedy') 
  and mv_cost < 50
于 2013-04-08T15:55:08.333 回答
0

该错误似乎出现在您的磨损条款中,您可以使用IN类似:

WHERE mv_genre IN ('Action', 'Comedy')

您当前的子句 ofmv_genre = ('Action' or 'Comedy')不计算if the genre is 'Action' or the genre is 'Comedy'它实际上只是意味着您要评估是否'Action' OR 'Comedy'为真,然后将结果与mv_genre永远不会返回您期望的结果进行比较。您可以使用列表轻松地与多个值进行比较,IN或者您可以更详细地进行比较,例如:

WHERE (mv_genre = 'Action' OR mv_genre = 'Comedy')

无论您喜欢哪个并满足您的需求。

于 2013-04-08T15:55:34.797 回答
0

您的查询应该是

mysql> select mv_no, mv_name, mv_cost, mv_genre from movie
   -> where mv_genre IN ('Action', 'Comedy') and mv_cost < 50
    -> order by mv_genre;
于 2013-04-08T15:56:08.207 回答