当子查询返回0行时,Mysql查询没有返回任何结果。

4

当尝试从子查询中选择字段时,如果任何子查询都没有返回任何行,则什么都不会返回(甚至不会返回空结果集)。

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值的一行。

最好您发布实际的代码,而不是(在我看来)虚构的示例。 - Michael
最好的情况下,你会得到价值,价值。最坏的情况是,你什么也得不到。然而,我期望得到一个笛卡尔积,但至少有一个结果查询必须返回一个值,才能返回一行。否则,就是正确的但没有条目。 - DRapp
2个回答

5
您需要进行外连接,如下所示:
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

这有所帮助,但如果两个子查询都没有返回任何行,则什么也不会得到。(再次强调,我期望得到1行NULL,NULL) - Red Taz
不知道如何完全解决,但这个链接可能会有所帮助 http://dev.mysql.com/doc/refman/5.0/en/join.html - Chetter Hummin
接受此答案,因为它解决了原始代码的潜在问题,谢谢。我的答案随附在此。 - Red Taz

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接