我有3个表,其中2个包含数据,1个包含其他两个的状态。
表 A 包含数据
表 B 包含数据
表 S 包含A和B的状态值
状态表条目示例:
我正在尝试构建一个查询来提取A和B中一系列数据条目的所有状态。 期望结果的例子:
我已经有一段有效的代码,但速度非常慢,特别是因为有10个状态,有时一次有数百个条目。
select S.owner, S.foreign_key,
s1 as ordered_Status, s2 as payed_Status, s3 as dispached_Status
from S as s1, S as s2, S as s3
where s1 like '%ordered%'
and s2 like '%payed%'
and s3 like '%dispached%'
group by S.foreign_key;
我在这里也没有显示选择foreign_key的标准,但你可以想象它会进一步减慢查询速度。 必须有一种更有效的方法来提取这些信息。
我不确定它是否相关,但对于表A和B的结构:
我根据产品和时间进行选择。基于新信息的更新的sql查询将是:
select S.owner, S.foreign_key,
s1 as ordered_Status, s2 as payed_Status, s3 as dispached_Status
from S as s1, S as s2, S as s3, A, B
where s1 like '%ordered%'
and s1.foreign_key=A.id
and s2 like '%payed%'
and s2.foreign_key=A.id
and s3 like '%dispached%'
and s3.foreign_key=B.id
and B.fk_A=A.id
and B.fk_product=99
and A.date_created > '2017-07-04 08:00:00'
group by S.foreign_key;
答案 0 :(得分:0)
由于您在查询中执行了多次自联接,因此查询速度非常慢。您可以使用下面的语句
来获得所需的输出案例(当(status_name =' ordered'和status = 1,然后是1,否则为0))为ordered_status