子查询返回值,但我的查询零行

时间:2014-04-10 08:30:42

标签: mysql

我有表t1,t1中的t2没有记录,但t2有行。

表脚本是

create table t1 ( n1 integer,n3 integer,n4 integer);

create table t2 (n2 integer);

insert into t2 value(1);

select n1,t22.n2 from t1 ,(select n2 from t2) t22;
null

select n2 from t2;
10

我应该得到值

select n1,n3,n4,t22.n2 from t1 ,(select n2 from t2) t22;

output :- 0,0,0,10

1 个答案:

答案 0 :(得分:0)

你想要的是从t2返回的值,是否在t1上有一个(匹配的?)行。

如果是这样,它会这样做: -

SELECT t1.n1, t1.n3, t1.n4, t22.n2 
FROM (SELECT n2 FROM t2) t22
LEFT OUTER JOIN t1;

但是如果你想要来自t1的项目,如果没有来自t2的匹配行,以及来自t2的任何项目,如果没有来自t1的匹配行,那么这通常需要一个完整的外部联接。 MySQL不支持完全外部联接,但您可以使用2个LEFT JOIN模拟它们并将结果联合起来。

这样的事情: -

SELECT t1.n1, t1.n3, t1.n4, t22.n2 
FROM (SELECT n2 FROM t2) t22
LEFT OUTER JOIN t1
UNION 
SELECT t1.n1, t1.n3, t1.n4, t22.n2 
FROM t1
LEFT OUTER JOIN (SELECT n2 FROM t2) t22;