gpt4 book ai didi

SQL 条件连接?

转载 作者:行者123 更新时间:2023-12-04 15:59:47 25 4
gpt4 key购买 nike

我有一个名为 LOGS 的表,其中包含以下列:

id - user - object - ref - field - from - to - join - ts

存储我正在编写的 PHP 应用程序的日志记录。但是,当我将所有数据返回到 PHP 中以执行“条件”连接时,是否可以在 SQL 查询中使用?例如,join 列可能包含“people”,表示 field 列需要与表 people 关联。

这可能吗?还是我必须在 PHP 端执行此操作?

最佳答案

LEFT join 应该可以解决这个问题

select * 
from
LOGS l
left join
PEOPLE p on p.peopleid = l.field and l.join = 'people'

我不确定我是否在 LOGS 和 PEOPLE 之间使用了正确的关系字段,但是通过包含 join where log type is people 的子句,您可以看到有条件地返回 PEOPLE 条目。

当你想有条件地从不同的表中返回时,事情变得更加复杂,因为你需要确保由 entity 表引入的额外字段是相同的(或者至少被标识为相同)。在这种情况下,您将被迫使用 UNION 结果。

select 
l.*,
p.peopleid as entityid,
p.fullname as displayname
from
LOGS l
left join
PEOPLE p on p.peopleid = l.field and l.join = 'people'

union all

select
l.*,
a.accountid as entityid,
p.accountname as displayname
from
LOGS l
left join
ACCOUNT a on a.accountid = l.field and l.join = 'account'

或者这个

select 
l.*,
entity.entityid as entityid,
entity.displayname as displayname
from
LOGS l
left join
(
select 'people' as type, p.peopleid as entityid, p.fullname as displayname
from PEOPLE

union all

select 'account', a.accountid, p.accountname
from ACCOUNT
) entity on entity.type = l.join and entity.entityid = l.field

但我可以想象像这样组合许多实体表以返回日志可能会导致查询非常慢。

关于SQL 条件连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11288384/

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