从mysql中的状态表中提取多个值

时间:2017-07-05 10:27:37

标签: mysql

我有3个表,其中2个包含数据,1个包含其他两个的状态。

A 包含数据
B 包含数据
S 包含A和B的状态值

状态表条目示例:

status Table

我正在尝试构建一个查询来提取A和B中一系列数据条目的所有状态。 期望结果的例子:

result Table

我已经有一段有效的代码,但速度非常慢,特别是因为有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的结构:

表A:
enter image description here
表B:
enter image description here

我根据产品和时间进行选择。基于新信息的更新的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;

1 个答案:

答案 0 :(得分:0)

由于您在查询中执行了多次自联接,因此查询速度非常慢。您可以使用下面的语句

来获得所需的输出

案例(当(status_name =' ordered'和status = 1,然后是1,否则为0))为ordered_status