没有外连接关键字的SQL查询

时间:2011-04-13 17:37:02

标签: sql outer-join

是否可以编写一个sql查询,你知道你必须使用左外连接..但是不能或不允许使用“外连接”关键字

我有两个表沙想从左表中获取带有空值的行......这很简单......但我不应该使用关键字....外连接....我需要为了自己加入外连接的逻辑

5 个答案:

答案 0 :(得分:3)

;WITH t1(c,d) AS
(
SELECT 1,'A' UNION ALL 
SELECT 2,'B'
),t2(c,e) AS
(
SELECT 1,'C' UNION ALL 
SELECT 1,'D' UNION ALL 
SELECT 3,'E'
)

SELECT t1.c, t1.d, t2.c, t2.e
FROM t1, t2 
WHERE t1.c = t2.c
UNION ALL
SELECT t1.c, t1.d, NULL, NULL
FROM t1 
WHERE c NOT IN (SELECT c 
                FROM t2 
                WHERE c IS NOT NULL)

返回

c           d    c           e
----------- ---- ----------- ----
1           A    1           C
1           A    1           D
2           B    NULL        NULL          

(相当于)

SELECT t1.c, t1.d, t2.c, t2.e
FROM   t1
       LEFT JOIN t2
         ON t1.c = t2.c  

答案 1 :(得分:3)

SELECT Field1 
FROM table1 
WHERE id NOT IN (SELECT id FROM table2)

SELECT Field1 
FROM table1 
WHERE NOT EXISTS (SELECT * FROM table2 where table2.id = table1.id)

这是人们所做的事情,但它已被弃用,目前无法正常工作(它有时会返回交叉连接而不是左连接),所以不应该使用它。我只是告诉你,所以你不要使用这个解决方案。

SELECT Field1 
FROM table1, table2 where table1.id *= table2.id

答案 2 :(得分:0)

对于SQL Server,您可以使用LEFT JOIN - OUTER是可选的,就像INTO语句中的INSERT一样。

所有OUTER JOIN都是一样的。

对于INNER JOIN,您只需指定JOIN没有限定符,就会被解释为INNER JOIN

答案 3 :(得分:0)

这将为表A中的所有行提供表B中没有匹配行的行:

SELECT * 
FROM A
WHERE NOT EXISTS (
  SELECT 1
  FROM B
  WHERE A.id = B.id
);

答案 4 :(得分:0)

返回两个表中所有匹配的行:

    SELECT a.*,b.* FROM table_a a, table_b b
    WHERE a.key_field = b.key_field

潜在的缺点是会跳过不匹配。