gpt4 book ai didi

mysql - 了解在 SQL 查询中使用大括号和 "OJ"

转载 作者:可可西里 更新时间:2023-11-01 07:35:57 25 4
gpt4 key购买 nike

我办公室的一名前雇员构建了一个在 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 的这种替代语法。
然而,这并不意味着应该使用它。

  1. 如果在某些时候您需要切换到另一个 RDBMS,那么使用特定于 RDBMS 的代码可能会有问题。
  2. 谷歌搜索,似乎 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;

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

关于mysql - 了解在 SQL 查询中使用大括号和 "OJ",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6767060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com