2012-03-25 151 views
3

当试图从一个子查询选择字段如果任何一个子查询不返回任何行,然后不返回任何结果(甚至不是空的结果集)MySQL查询没有返回时子查询返回0行

SELECT sub1.field, sub2.another_field 
    FROM (
     (
      SELECT field 
      FROM table 
      WHERE id=1 
     ) AS sub1, (
      SELECT another_field 
      FROM table 
      WHERE id=2 
     ) AS sub2 
    ) 

我希望在子查询返回0行时包含NULL值的行。

+0

如果您发布了实际的代码而不是(看起来像是我)是一个制作的例子,那会更好。 – MichaelRushton 2012-03-25 12:19:57

+0

充其量,你会得到价值,价值。最糟糕的是,你没有得到任何东西。但是,我会预测一个笛卡儿,但在MINIMUM中,其中一个结果查询将不得不返回一个值,以便返回1行。否则,更正没有条目。 – DRapp 2012-03-25 12:20:51

回答

3

你需要做的外连接如下

SELECT sub1.field, sub2.another_field 
FROM (
     SELECT field, id 
     FROM tab1 
     WHERE id=1 
    ) AS sub1 LEFT OUTER JOIN (
     SELECT another_field, id 
     FROM tab1 
     WHERE id=2 
    ) AS sub2 
    ON sub1.id = 1 and sub2.id = 2 
+0

这有帮助,但如果两个子查询都不返回任何行,我什么也得不到。 (再次,我期待1行NULL,NULL) – 2012-03-25 12:05:51

+0

不知道如何完全解决,但这个链接可能有助于http://dev.mysql.com/doc/refman/5.0/en/join。 html – 2012-03-25 12:12:33

+0

接受,因为这解决了原始代码的根本问题,谢谢。我的答案伴随着这一点。 – 2012-03-25 12:59:41

0

为了解决该查询返回任何的问题时,总所有子查询返回零行我裹了一大堆的UNION一排空白。

SELECT * FROM (
    SELECT sub1.field, sub2.another_field 
    FROM (
     SELECT field, id 
     FROM tab1 
     WHERE id=1 
    ) AS sub1 

    LEFT OUTER JOIN (
     SELECT another_field, id 
     FROM tab1 
     WHERE id=2 
    ) AS sub2 
    ON sub1.id = 1 and sub2.id = 2 

    UNION 

    SELECT NULL, NULL 

) AS t0