MySQL认证实践问题

时间:2009-09-06 07:23:37

标签: mysql

我想知道我该如何假设这些问题实际上是在问什么?

问题的一部分

  

没有项目的客户应该是   显示,但没有的项目   有一个开始日期和项目   没有结束日期不应该   显示

答案

mysql> SELECT
->  c.name AS CLIENT, p.name AS PROJECT,
->  p.start AS START, p.end AS END
->  FROM client AS c
->  LEFT JOIN project AS p
->  USING (cid) /* or: ON c.cid = p.cid */
->  WHERE p.start IS NOT NULL
->  AND p.end   IS NOT NULL
->  ORDER BY c.name ASC, p.start ASC
-> ;

我认为根据答案,这个问题应该被称为“没有开始和结束日期的项目”,而不是“...和那些......的项目”似乎意味着排除没有项目的项目开始或结束日期?还是只有我?

更新:

mysql> select c.name, p.name, p.start, p.end
    -> from client c left join project p
    -> using (cid);
+------------+--------------+------------+------------+
| name       | name         | start      | end        |
+------------+--------------+------------+------------+
| Seamen's   | Intranet     | NULL       | NULL       |
| Lennart AG | New CMS      | 2003-01-00 | 2003-05-00 |
| Lennart AG | Intranet     | 2009-02-00 | NULL       |
| MySQL AB   | Texi2XML     | 2002-04-00 | 2003-09-00 |
| MySQL AB   | Study Guides | 2002-09-00 | 2003-03-30 |
| Icoaten    | PDC Server   | 2003-01-00 | 2003-01-00 |
| Icoaten    | SMB Server   | 2003-05-00 | NULL       |
| Icoaten    | WLAN         | NULL       | 2003-08-00 |
| Nittboad   | NULL         | NULL       | NULL       |
+------------+--------------+------------+------------+
9 rows in set (0.04 sec)

mysql> select c.name, p.name, p.start, p.end
    -> from client c left join project p
    -> using (cid)
    -> where p.start is not null
    -> and p.end is not null;
+------------+--------------+------------+------------+
| name       | name         | start      | end        |
+------------+--------------+------------+------------+
| Lennart AG | New CMS      | 2003-01-00 | 2003-05-00 |
| MySQL AB   | Texi2XML     | 2002-04-00 | 2003-09-00 |
| MySQL AB   | Study Guides | 2002-09-00 | 2003-03-30 |
| Icoaten    | PDC Server   | 2003-01-00 | 2003-01-00 |
+------------+--------------+------------+------------+
4 rows in set (0.00 sec)

mysql> select c.name, p.name, p.start, p.end
    -> from client c left join project p
    -> using (cid)
    -> where p.start is not null
    -> or p.end is not null ;
+------------+--------------+------------+------------+
| name       | name         | start      | end        |
+------------+--------------+------------+------------+
| Lennart AG | New CMS      | 2003-01-00 | 2003-05-00 |
| Lennart AG | Intranet     | 2009-02-00 | NULL       |
| MySQL AB   | Texi2XML     | 2002-04-00 | 2003-09-00 |
| MySQL AB   | Study Guides | 2002-09-00 | 2003-03-30 |
| Icoaten    | PDC Server   | 2003-01-00 | 2003-01-00 |
| Icoaten    | SMB Server   | 2003-05-00 | NULL       |
| Icoaten    | WLAN         | NULL       | 2003-08-00 |
+------------+--------------+------------+------------+
7 rows in set (0.00 sec)

更新3:

  

“没有开始的项目   结束日期“正在寻找这两个领域   以数学方式丢失:启动IS NULL   AND End IS NULL。

     

“没有开始日期的项目   和没有结束的项目   日期“就像你说的那样,真的是”或“   (启动IS NULL或结束IS NULL)。注意:   这相当于“NOT(开始IS   NOT NULL AND End IS NOT NULL)“。

1 个答案:

答案 0 :(得分:0)

WHERE p.start IS NOT NULL
AND p.end IS NOT NULL

排除了两种情况。因此,排除没有开始日期的项目,以及没有结束日期的项目。当然,也没有开始日期和结束日期的项目。

他们的措辞,至少对我而言,非常明确地指明了这种行为。

但请注意,他们的答案还有另一个问题:不会显示具有一个项目但是一个项目缺少开始日期或结束日期(或两者)的客户端。糟糕。


编辑:尝试#2

关于英语的问题正朝着offtopic方向发展,但我将这些句子读作:

  

应该显示没有项目的客户,但是(没有项目的项目)   有一个开始日期)和(没有结束日期的项目)不应该   显示。

换句话说,作为两项清单。在语法上与:

相同
  

不应显示没有项目的客户,但不应显示Seamen和MySQL AB。

请注意,显然意味着如果客户端的名称是Seamen,或者如果其名称是MySQL AB,则不应显示客户端,而不是如果客户端的名称是两者都不应显示客户端。