1 sql database join where-clause
例:
如果我有一张桌子和他们的主人.
我可以做任何一个或者为自然连接获得相同的结果:
SELECT * FROM owners, things WHERE owners.id = things.owner_id
SELECT * FROM owners JOIN things ON owners.id = things.owner_id
Run Code Online (Sandbox Code Playgroud)
现在,如果我想做左联?像这样,所有业主都归还...
SELECT * FROM owners LEFT JOIN things ON owners.id = things.owner_id
Run Code Online (Sandbox Code Playgroud)
是否可以将任何类型的连接重写为一组WHERE条件?
谢谢
一个INNER JOIN为隐式连接可以随时改写.
一个OUTER JOIN有时可以通过专有条款行重写(+)的Oracle,*在SQL Server等,但并非总是如此.
另外,OUTER JOIN可以使用UNION ALL和子查询重写:
SELECT *
FROM a
FULL JOIN
b
ON some_condition(a, b)
Run Code Online (Sandbox Code Playgroud)
是相同的
SELECT *
FROM a, b
WHERE some_condition(a, b)
UNION ALL
SELECT a.*, NULL, NULL, …, NULL
FROM a
WHERE NOT EXISTS
(
SELECT NULL
FROM b
WHERE some_condition(a, b)
)
UNION ALL
SELECT NULL, NULL, …, NULL, b.*
FROM b
WHERE NOT EXISTS
(
SELECT NULL
FROM a
WHERE some_condition(a, b)
)
Run Code Online (Sandbox Code Playgroud)
这曾经是一个解决办法Oracle和PostgreSQL它不支持ANSI的语法在早期版本中,也是一种解决办法是MySQL不支持FULL JOIN
ANSI OUTER JOIN如果数据库支持语法,则应使用语法.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |