mysql 理解SQL查询中大括号和“OJ”的使用

z4bn682m  于 2024-01-05  发布在  Mysql
关注(0)|答案(2)|浏览(246)

我办公室以前的一个员工构建了一个php脚本,它在SQL查询中使用了花括号。我知道它通常用于封装数组变量,但是这个查询在字符串中没有任何PHP变量。有人能澄清一下在查询的FROM部分生成的表实际上需要花括号的原因吗?OJ代表什么?

  1. SELECT
  2. DISTINCT ra.folder_id,
  3. pd.id,
  4. f.name,
  5. pd.descriptor_text
  6. FROM
  7. {
  8. OJ permission_descriptors pd
  9. LEFT JOIN permission_descriptor_users pdu
  10. ON pdu.descriptor_id = pd.id
  11. }
  12. role_allocations ra,
  13. folders f
  14. WHERE
  15. pdu.descriptor_id IS NULL AND
  16. pd.id = ra.permission_descriptor_id AND
  17. pd.id != 1
  18. ra.folder_id = f.id
  19. ORDER BY
  20. ra.folder_id

字符串

pes8fvy9

pes8fvy91#

MySQL支持外部连接的这种替代语法。
但这并不意味着它应该被使用。
1.如果在某些时候您需要切换到另一个RDBMS,那么使用特定于RDBMS的代码可能会有问题。
1.在谷歌上搜索一下,MySQL似乎不支持超过2个连接的这种语法。
旁白:
代码的另一个不符合ANSI的问题是后续的联接。
这是一个ANSI兼容版本的快速尝试(未测试):

  1. SELECT
  2. DISTINCT ra.folder_id,
  3. pd.id,
  4. f.name,
  5. pd.descriptor_text
  6. FROM
  7. permission_descriptors pd
  8. LEFT JOIN permission_descriptor_users pdu
  9. ON pdu.descriptor_id = pd.id
  10. LEFT JOIN role_allocations ra
  11. ON pd.id = ra.permission_descriptor_id
  12. LEFT JOIN folders f
  13. ON ra.folder_id = f.id
  14. WHERE
  15. pdu.descriptor_id IS NULL AND
  16. pd.id <> 1
  17. ORDER BY
  18. ra.folder_id;

字符串
其他说明:
For inequality != will work, but <> is preferred.

展开查看全部
xam8gpfp

xam8gpfp2#

您可以删除“{ oj”和“}”,SQL将像以前一样工作,只是不在ODBC中。

  1. escaped_table_reference:
  2. table_reference
  3. | { OJ table_reference }

字符串
连接语法说明中显示的{ OJ...}语法仅用于与ODBC兼容。语法中的花括号应按字面意思编写;它们不是语法说明中其他地方使用的元括号。
第一个月
可以在{ OJ...}中使用其他类型的联接,如INNER JOIN或RIGHT OUTER JOIN。这有助于与某些第三方应用程序兼容,但不是正式的ODBC语法。
Ref
“OJ”是Outer Join的缩写。

相关问题