MySQL проверить наличие данных - PullRequest
0 голосов
/ 14 апреля 2020

Я действительно новичок в SQL, и у меня есть вопрос, касающийся проверки существования данных

У меня есть несколько таблиц, Table_A, Table_B1, Table_B2, Table_B3, ..., Table_Bn, в следующем формате:

Table_A

id | Name | Value 
-- |  --  | -- 
01 | Alex | xx
02 | Ben  | xx
03 | Jack | xx
... 
99 | Ken  | xx

Table_B1

id
--
05
18
...
79

Table_B2

id
--
18
...
84

et c.

То, что я надеюсь получить, является таблицей вроде этого:

id | Name | B1exist | B2exist | ... | Bnexist
-- | ---- | ------- | ------- | --- | -------  
05 |      |    1    |    0    |     |        
18 |      |    1    |    1    |     |        
22 |      |    0    |    0    |     |        
... 
79 |      |    1    |    0    |     |        
84 |      |    0    |    1    |     |        

т.е. суммирование различных идентификаторов происходит в B1 , B2, ... , Bn , посмотреть, существует ли каждый из них в каждом B таблица

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020

Я бы попробовал что-то вроде этого:

Select Table_A.id, Table_A.name, (...) IFNULL(B1_1.num, 0) as B1exists, IFNULL(B2_1.num, 0) as B2exists, ....., IFNULL(BN_1.num, 0) as BNexists
From Table_A
Left join (Select id, 1 as num From Table_B1) as B1_1 on Table_A.id = B1_1.id
Left join (Select id, 1 as num From Table_B2) as B2_1 on Table_A.id = B2_1.id
...
Left join (Select id, 1 as num From Table_BN) as BN_1 on Table_A.id = BN_1.id
0 голосов
/ 14 апреля 2020

Вероятно, самый простой способ - это массивные union all и агрегация:

select id, max(isb1), max(isb2), max(isb3)
from ((select id, 0 as isb1, 0 as isb2, 0 as isb3 from ids
      ) union all
      (select id, 1 as isb1, 0 as isb2, 0 as isb3 from b1
      ) union all
      (select id, 0 as isb1, 1 as isb2, 0 as isb3 from b2
      ) union all
      (select id, 0 as isb1, 0 as isb2, 1 as isb3 from b3
      )
     ) i
group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...