1

このタイプのクエリがあります

SELECT one, two, three FROM (
  ( SELECT data AS one FROM thetable WHERE `id` = '$id' AND name = 'one') t1,
  ( SELECT data AS two FROM thetable WHERE `id` = '$id' AND name = 'two') t2,  
  ( SELECT data AS three FROM thetable WHERE `id` = '$id' AND name = 'three') t3
)

行の 1 つが特定の で欠落している場合id、関連するすべての選択をスキップしますid

私はこのようなものを得ることを望んでいます:

id:24     one:somedata      two:somedata      three:somedata
id:25     one:somedata      two:EMPTY         three:somedata
id:26     one:somedata      two:somedata      three:somedata
id:27     one:EMPTY         two:somedata      three:somedata

しかし、私は得ています:

id:24     one:somedata      two:somedata      three:somedata
id:25     one:EMPTY         two:EMPTY         three:EMPTY
id:26     one:somedata      two:somedata      three:somedata
id:27     one:EMPTY         two:EMPTY         three:EMPTY

なんで?

4

1 に答える 1

2

以下の方法を試すことができます-

select id,
max(case when  name = 'one' then data end) as one,
max(case when  name = 'two' then data end) as two,
max(case when  name = 'three' then data end) as three
from thetable where `id` = '$id'
group by id
于 2020-07-03T17:36:48.810 に答える