我办公室的一名前雇员构建了一个在 SQL 查询中使用大括号的 PHP 脚本。我知道它通常适用于封装数组变量之类的事情,但此查询的字符串中没有任何 PHP 变量。有人可以阐明在查询的 FROM
部分中生成的表实际上需要花括号的原因是什么,以及 OJ 代表什么?
SELECT
DISTINCT ra.folder_id,
pd.id,
f.name,
pd.descriptor_text
FROM
{
OJ permission_descriptors pd
LEFT JOIN permission_descriptor_users pdu
ON pdu.descriptor_id = pd.id
}
role_allocations ra,
folders f
WHERE
pdu.descriptor_id IS NULL AND
pd.id = ra.permission_descriptor_id AND
pd.id != 1
ra.folder_id = f.id
ORDER BY
ra.folder_id
最佳答案
MySQL 支持 Outer Join 的这种替代语法。
然而,这并不意味着应该使用它。
- 如果在某些时候您需要切换到另一个 RDBMS,那么使用特定于 RDBMS 的代码可能会有问题。
- 谷歌搜索,似乎 MySQL 不支持超过 2 个连接的这种语法。
旁白:
代码的另一个不符合 ANSI 标准的问题是后续连接。
这是对符合 ANSI 标准的版本(未测试)的快速尝试:
SELECT
DISTINCT ra.folder_id,
pd.id,
f.name,
pd.descriptor_text
FROM
permission_descriptors pd
LEFT JOIN permission_descriptor_users pdu
ON pdu.descriptor_id = pd.id
LEFT JOIN role_allocations ra
ON pd.id = ra.permission_descriptor_id
LEFT JOIN folders f
ON ra.folder_id = f.id
WHERE
pdu.descriptor_id IS NULL AND
pd.id <> 1
ORDER BY
ra.folder_id;
关于mysql - 了解在 SQL 查询中使用大括号和 "OJ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767060/