我办公室以前的一个员工构建了一个php脚本,它在SQL查询中使用了花括号。我知道它通常用于封装数组变量,但是这个查询在字符串中没有任何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
字符串
2条答案
按热度按时间pes8fvy91#
MySQL支持外部连接的这种替代语法。
但这并不意味着它应该被使用。
1.如果在某些时候您需要切换到另一个RDBMS,那么使用特定于RDBMS的代码可能会有问题。
1.在谷歌上搜索一下,MySQL似乎不支持超过2个连接的这种语法。
旁白:
代码的另一个不符合ANSI的问题是后续的联接。
这是一个ANSI兼容版本的快速尝试(未测试):
字符串
其他说明:
For inequality
!=
will work, but<>
is preferred.xam8gpfp2#
您可以删除“{ oj”和“}”,SQL将像以前一样工作,只是不在ODBC中。
字符串
连接语法说明中显示的{ OJ...}语法仅用于与ODBC兼容。语法中的花括号应按字面意思编写;它们不是语法说明中其他地方使用的元括号。
第一个月
可以在{ OJ...}中使用其他类型的联接,如INNER JOIN或RIGHT OUTER JOIN。这有助于与某些第三方应用程序兼容,但不是正式的ODBC语法。
Ref
“OJ”是Outer Join的缩写。