是否可以编写一个sql查询,你知道你必须使用左外连接..但是不能或不允许使用“外连接”关键字
我有两个表沙想从左表中获取带有空值的行......这很简单......但我不应该使用关键字....外连接....我需要为了自己加入外连接的逻辑
答案 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
潜在的缺点是会跳过不匹配。